DDD, слой Anti Corruption, руководство пользователя?

На данный момент нам нужно создать приложение, основанное на устаревшем. Код для этого старого приложения должен быть выброшен и переписан, но, как обычно, вместо того, чтобы переписывать его, нам нужно опираться на что-то новое. Недавно мы решили перейти по пути DomainDrivenDesign. Таким образом, уровень защиты от коррупции может быть решением наших проблем. Насколько я понимаю, таким образом можно было бы постепенно переписать старую заявку.

Но - я не могу найти хороший пример. Я был бы признателен за ЛЮБОЕ информацию.

Ответы

Ответ 1

В моей конкретной реализации EmployeeAccessService вызывается репозиторием. Это действительно фасад в слой борьбы с коррупцией. Он делегирует EmployeeAccessAdapter. Адаптер извлекает объект из унаследованной модели (который он получает из EmployeeAccessFacade), затем передает его в EmployeeAccessTranslator для преобразования объекта из старой модели в объект домена в моей модели приложения.

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)

Ответ 2

Из DDD-книга (проект, управляемый доменами: проблема сложности в сердце программного обеспечения) Эрика Эванса

Открытый интерфейс Обычно появляется АНТИКОРРУПЦИОННЫЙ СЛОЙ как набор УСЛУГ, хотя иногда он может принимать форму ENTITY.

и чуть позже

Один из способов организации дизайна АНТИКОРРУПЦИОННЫЙ СЛОЙ - это сочетание FACADES, ADAPTERS (оба от Gamma et al. 1995) и переводчиков, а также коммуникационные и транспортные механизмы обычно необходимо разговаривать между системы.

Итак, вы можете найти примеры, посмотрев предложенный шаблон адаптера и фасад.

Я попытаюсь перефразировать то, что сказал Эрик Эванс, ваш слой с антикоррупцией будет отображаться как служба снаружи вашего слоя. Таким образом, вне слоя антикоррупции другие слои не будут знать, что они "говорят" с антикоррупционным слоем. Внутри слоя вы должны использовать адаптеры и фасады, чтобы обернуть ваши устаревшие источники информации.

Дополнительная информация о слое антикоррупции: