Eu faço aplicativos de linha de negócios em que todos os outros desenvolvedores estão acostumados a criar aplicativos básicos de CRUD ou focam-se apenas em criar interfaces bonitas / funcionais e estou obtendo muito o seguinte.
"Com a maneira como usamos, o funcionário teria tudo o que você poderia fazer com um funcionário". E era verdade. Aquela "classe" tinha milhares de linhas de código e tudo o que você poderia fazer com um funcionário estava lá. Ou, pior ainda, havia uma tabela de dados de funcionários e cada desenvolvedor descobriu como fazer o que queria fazer no manipulador de eventos.
Todas as coisas ruins sobre essa abordagem eram verdadeiras, mas pelo menos o desenvolvedor que usa o funcionário poderia, sem consultar outros documentos, descobrir como inscrever o funcionário em um plano de saúde, dar um aumento de salário, demitir, contratar, transferir etc. para Manager e todas as outras idéias principais. Ou, se eles usassem o empregado em outras tabelas de dados necessárias, poderiam fazer o que quisessem.
Sim, havia muito código duplicado. Sim, era um código muito quebradiço. Sim, testar foi muito mais difícil do que o necessário. Sim, a alteração da funcionalidade foi indutora de medo e a Copy Paste foi natural devido à abordagem.
Mas eles poderiam pelo menos descobrir o que estava disponível criando uma classe ou poderiam fazer o que precisavam, sem ter que entender a diferença entre interfaces, classes abstratas, classes concretas etc. E não precisavam procurar nada além de os métodos retornados pelo intellisense ou conhecem as tabelas em que os dados residiam.
Eu pesquisei no Google / binged e até no yahoo! D, mas não encontrei nenhum reconhecimento desse problema.
Então talvez não haja um problema e só estou perdendo alguma coisa. Eu inventei meu cérebro tentando descobrir uma solução em que os desenvolvedores que não funcionam com o comportamento / design real podem descobrir facilmente como fazer algo sem ter que fazer referência a documentos externos ou verificar os nomes das classes nos vários componentes / projetos para encontrar o que parece funcionar.
A única coisa que consegui sugerir é tê-los, por falta de um nome melhor, "Classe da Tabela de Conteúdo" que nada mais faz que retornar as classes reais (e na verdade a maioria delas são interfaces, mas não conheça a diferença ou mesmo cuidado) que outros desenvolvedores podem usar para executar as tarefas desejadas. Ainda acabamos com aulas realmente grandes, mas quase não há comportamento nelas.
Existe uma maneira melhor que não exija conhecimento íntimo da camada intermediária em que a implementação real do SOLID ocorre?
Basicamente, o que estou perguntando é que existe uma maneira de permitir que os desenvolvedores do tipo CRUD continuem sendo desenvolvedores de CRUD em um sistema muito complexo