Abusar de herança

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Abusar de herança

Mensagem por JoséQuintas »

Parece exagero.

Situação que ocorreu exatamente neste momento:
- Classe frmClass - cuida de telas
- Classe frmCadastroClass - cuida da navegação de cadastros e herda a frmClass
- Classe AUXILIARClass - pra facilitar cadastros genéricos, herda a frmCadastroClass
- Classe AuxMODFISClass - cadastro de Modelos de Documentos Fiscais, que herda a AUXILIARClass

Em várias telas tenho lá pra mostrar descrição de tabelas, como por exemplo de Modelos de Documentos Fiscais, ICMS CST, PIS CST, Cofins CST, todas num arquivo multitabela.

Código: Selecionar todos

Encontra( "MODFIS" + jplfisc->lfModFis, "jptabel", "numlan" )
@ Row(), 32 SAY jptabel->axDescri
Encontra( "ICMCST" + jplfisc->lfIcmCst, "jptabel", "numlan" )
@ Row(), 32 SAY jptabel->axDescri
Encontra( "PISCST" + jplfisc->lfPisCst, "jptabel", "numlan" )
@ Row(), 32 SAY jptabel->axDescri
Encontra( "COFCST" + jplfisc->lfCofCst, "jptabel", "numlan" )
@ Row(), 32 SAY jptabel->axDescri
Pra reduzir isso, vou criar o método Descricao( cCodigo )
Então vou criar em AUXILIARClass esse método, que já resolve a maioria.

Código: Selecionar todos

METHOD Descricao( cCodigo ) CLASS AUXILIARClass
   Encontra( ::cTabelaAuxiliar, "jptabel", "numlan" )
   RETURN jptabel->axDescri
Com isso, o mesmo código acima virou isto:

Código: Selecionar todos

@ Row(), 32 SAY AuxMODFISClass():Descricao( jplfisc->lfModFis )
@ Row(), 32 SAY AuxICMCSTClass():Descricao( jplfisc->lfIcmCst )
@ Row(), 32 SAY AuxPISCSTClass():Descricao( jplfisc->lfPisCst )
@ Row(), 32 SAY AuxCOFCSTClass():Descricao( jplfisc->lfCofCst )
A classe final de uma tabela auxiliar está assim:

Código: Selecionar todos

CREATE CLASS AUXTRIPROClass INHERIT AUXILIARClass
   DATA cTabelaAuxiliar INIT "TRIPRO"
   END CLASS
Essa é da tributação de produtos.
Ao mesmo tempo que parece inútil, só um parâmetro, evita colocar parâmetro em todo lugar que é usada (validação, seleção, agora descrição, etc).
Melhor do que antigamente, que eu usava DescrTab( cCodigo, 25 ), onde na hora de localizar aonde eu usava a tabela 25 era complicado procurar nos fontes.
Agora, pra procurar aonde usa tributação de produto, só pesquisar nos fontes por AuxTRIPRO.
Tem horas que parece abuso, mas se os fontes estão mais simples, deve ser normal.
Obs. Essa classe de uma linha também é responsável pelo cadastro: inclui, altera, exclui, etc.

Lógico... agora que tem classe própria, vai ter seu próprio método de exclusão, pra verificar se está em uso em algum lugar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Abusar de herança

Mensagem por JoséQuintas »

Uia, já tem 8 anos o post.

Código: Selecionar todos

CREATE CLASS AUXTRIPROClass INHERIT AUXILIARClass
   DATA cTabelaAuxiliar INIT "TRIPRO"
   END CLASS
Esse, NA ÉPOCA, era o fonte completo desse cadastro, incluindo browse, telas de inclusão/alteração/consulta, rotina de validação, rotina pra mostrar descrição, etc.
SÓ ISSO MESMO.

Aí pergunto: uma IDE de criar telas, ou um gerador de fontes, vão ajudar no que?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder