Página 1 de 1

Abusar de herança

Enviado: 18 Set 2013 13:23
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.

Abusar de herança

Enviado: 20 Out 2021 19:39
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?