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.
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.
METHOD Descricao( cCodigo ) CLASS AUXILIARClass
Encontra( ::cTabelaAuxiliar, "jptabel", "numlan" )
RETURN jptabel->axDescri
Com isso, o mesmo código acima virou isto:
@ 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:
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.