DDD, Anti camada de corrupção, como fazer?
-
05-09-2019 - |
Pergunta
No momento, temos que construir uma aplicação que se baseia em um legado. Código para que a aplicação de idade deve ser jogado fora e reescrito, mas como ele normalmente vai - em vez de reescrevê-lo, precisamos base de algo novo sobre ele. Recentemente, decidimos ir o caminho DomainDrivenDesign. Então - camada anti corrupção poderia ser uma solução para os nossos problemas. Tanto quanto eu entendo, desta forma, deve ser possível para reescrever gradualmente a aplicação de idade.
Mas - eu não consigo encontrar nenhum exemplo bom. Eu apreciaria ANY informações.
Solução
Em minha implementação particular, EmployeeAccessService é chamado por um Repositório. É realmente uma fachada para a camada de Anti-corrupção. Ele delega ao EmployeeAccessAdapter. O adaptador recupera um objeto do modelo de legado (que recebe de EmployeeAccessFacade), em seguida, passa para o EmployeeAccessTranslator para transformar o objeto do modelo de legado para o objeto de domínio no modelo do meu aplicativo.
EmployeeAccessService
public Employee findEmployee(String empID){
return adapter.findEmployee(empID);
}
EmployeeAccessAdapter
public Employee findEmployee(String empID){
EmployeeAccessContainer container = facade.findEmployeeAccess(empID);
return translator.translate(container);
}
EmployeeAccessTranslator
public Employee translate(EmployeeAccessContainer container){
Employee emp = null;
if (container != null) {
employee = new Employee();
employee.setEmpID(idPrefix + container.getEmployeeDTO().getEmpID());
...(more complex mappings)
Outras dicas
De o DDD livro (Domain-Driven Edifício: Roubada complexidade no coração de Software) por Eric Evans:
A interface pública do ANTICORRUPÇÃO CAMADA geralmente aparece como um conjunto de serviços, embora ocasionalmente, pode tomar a forma de Uma entidade.
e um pouco mais tarde
Uma maneira de organizar o projeto de o CAMADA ANTICORRUPÇÃO é como um combinação das fachadas, os adaptadores (ambos de Gama et ai. 1995), e tradutores, juntamente com o mecanismos de comunicação e de transporte geralmente precisava falar entre sistemas.
Assim, você pode encontrar exemplos, olhando para a padrão adaptador sugeriu e fachada padrão .
Vou tentar parafrasear o que Eric Evans disse, sua camada anti-corrupção aparecerá como serviços para o exterior da sua camada. Então, fora da camada anti-corrupção das outras camadas não sabem que são "falar" com uma camada anti-corrupção. Dentro da camada você usar adaptadores e fachadas para embrulhar as suas fontes de informação legados.
Mais informações sobre a camada anti-corrupção: