Introdução
Estou implementando uma classe Java abstrata de uma estrutura de processamento *. Ao implementar a função execute
, sou capaz de adicionar funcionalidade lógica de negócios. Gostaria de adicionar o registro no início e no final de cada implementação de todas as minhas funções de execução. Também entre alguns logs, se coisas específicas forem feitas. No entanto, eu gostaria de fazer isso de maneira uniforme. Meu pensamento era herdar a classe de estrutura para uma nova classe que implementa o log e fornece algumas novas executeWithLogging
funções, que estão envolvendo o log em partes específicas. Não tenho certeza se essa é a melhor ideia e se posso usar um padrão de design que tornaria todo o empreendimento elegante. Como eu continuaria com a coisa toda?
Desafios (considere estes!)
- Um desafio no meu caso é que a classe original tem apenas uma
execute
função; no entanto, eu precisaria registrar várias partes. - A segunda coisa é: Usar um padrão decorador (também foi minha primeira ideia) não funciona muito bem, se eu estiver usando também um
execute
, porque asuper.execute()
função-teria que ser chamada na primeira linha do meu novoexecute()
, não é? ? - Haveria pelo menos 4 classes envolvidas:
BaseFunction
da estrutura,LoggingFunction extends BaseFunction
de mim,MyBusinessFunction extends LoggingFunction
de mim,MyBusinessClass
que instanciaMyBusinessFunction
. - Não só preciso fazer logon no início e no final de
execute
, mas também no meio. - O "registro" não é apenas o registro Java simples, mas o registro em um banco de dados. Isso não muda nada sobre os princípios, mas demonstra que o log pode ser mais do que apenas uma linha de código.
Talvez um exemplo de como eu faria a coisa toda seria legal, para eu continuar.
| * Uma função Storm Trident, semelhante a um parafuso Storm, mas isso não é particularmente importante.
execute
em BaseFunction
abstrato?
execute
é abstrato em BaseFunction
.