DDD, couche anti-corruption, comment faire?
-
05-09-2019 - |
Question
À l'heure actuelle, nous devons construire une application qui est basée sur un héritage un. Code pour cette ancienne application devrait être jeté et réécrite, mais comme il va généralement - au lieu de le réécrire, nous avons besoin de fonder quelque chose de nouveau sur elle. Récemment, nous avons décidé d'aller le chemin DomainDrivenDesign. Donc - couche anti-corruption pourrait être une solution pour nos problèmes. Pour autant que je comprends, cette façon, il devrait être possible de réécrire progressivement l'ancienne application.
Mais - je ne peux pas trouver un bon exemple. Je vous serais reconnaissant ANY informations .
La solution
Dans ma mise en œuvre particulière, EmployeeAccessService est appelé par un dépôt. Il est vraiment une façade dans la couche anti-corruption. Il délègue au EmployeeAccessAdapter. L'adaptateur va chercher un objet à partir du modèle existant (dont il tire de EmployeeAccessFacade), puis passe à la EmployeeAccessTranslator pour transformer l'objet du modèle existant à l'objet de domaine dans le modèle de mon application.
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)
Autres conseils
De livre DDD (Domain-Driven Design: Tackling la complexité dans le coeur du logiciel) par Eric Evans:
L'interface publique du COUCHE CORRUPTION apparaît généralement comme un ensemble de services, bien parfois il peut prendre la forme de une entité.
et un peu plus tard
Une façon d'organiser la conception de la Couche anticorruption est en combinaison des façades, des adaptateurs (à la fois de Gamma et al. 1995), et traducteurs, avec le des mécanismes de communication et de transport habituellement nécessaire pour parler entre systèmes.
Ainsi, vous pouvez trouver des exemples en regardant le modèle suggéré href="http://en.wikipedia.org/wiki/Adapter_pattern" et motif de façade .
Je vais essayer de paraphraser ce que Eric Evans a dit, votre couche anti-corruption apparaîtra en tant que services à l'extérieur de votre couche. Donc, en dehors de la couche anti-corruption les autres couches ne savent qu'ils sont « parler » avec une couche anti-corruption. A l'intérieur de la couche que vous utilisez des adaptateurs et des façades pour envelopper vos sources d'information existantes.
Plus d'informations sur la couche anti-corruption: