Vocês já criaram alguma classe especialista, para tratar de um tipo específico de tecnologia? Por exemplo, a classe abaixo, que lida com SQLs complexas e otimizadas (implementações excluídas):
[code]public class FastSqlQueries {
public Map<TestCase, Integer> getTestCaseTotalsByPlan(TestPlan plan) {
//Código com um monte de SQLs
}
public List<TestCase> getTestCaseByComplexCriteria(ComplexCriteria c) { }
public List<Date, TestSession> getHistoricalSessionInfo() { };
}[/code]
Claramente, essa é uma classe muitíssimo pouco coesa. Entretanto, eu notei que classes assim podem ser benéficas quando separam um código extremamente especialista (SQLs complexas, escovação de bits, etc) e, ao mesmo tempo, torna menos complexas as classes de negócios.
Um outro exemplo dessa situações foi a seguinte. Tivemos de implementar um protocolo, com diversas mensagens de um padrão proprietário (que não estava sob nosso controle), vindas da central (que é implementada em C). A decodificação das mensagens inicialmente era feita em pequenas classes “decoders”, que usando polimorfismos e afins, lia os dados do ByteBuffer e instanciava objetos que representavam as diversas mensagens do canal em uma maneira OO e compatível com Java.
Pois bem, os problemas foram drasticamente reduzidos quando simplesmente separamos a escovação de bits para uma classe chamada “MessageDecoder”, que recebia os ByteBuffers do canal e gerava os tais objetos. Nossos escovadores de bits profissionais e especialistas em protocolo (de uma cultura C), ficaram extremamente satisfeitos com a nova abordagem. Deixamos a complexidade encapsulada e na mão deles. Outra vantagem observada é que o código da decodificação do protocolo ficou “próximo”, e não espalhado pela hierarquia. Quem já trabalhou com escovação de bits sabe que observar os dados de perto é muito interessante.
Seria a estratégia “vamos complicar em um só lugar, para não complicar em todo lugar”. :lol:
Alguém concorda? Discorda? Tem uma alternativa melhor?
Uns tempos depois, li num livro do Craig Larmann uma dica parecida, mas mesmo ali o autor me pareceu expressando uma opinião pessoal dele.