DDD, Уровень защиты от коррупции, как это сделать?

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

Но - я не могу найти хорошего примера. Буду признателен за ЛЮБУЮ информацию.


person Arnis Lapsa    schedule 26.05.2009    source источник


Ответы (2)


В моей конкретной реализации 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)
person Troy Campano    schedule 27.05.2009

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

Открытый интерфейс СЛОЯ АНТИКОРРУПЦИИ обычно отображается как набор СЛУЖБ, хотя иногда он может принимать форму Сущности.

и чуть позже

Один из способов организации дизайна АНТИКОРРУПЦИОННОГО СЛОЯ - это комбинация ФАСАДОВ, АДАПТЕРОВ (оба из Gamma et al. 1995) и трансляторов, а также механизмов связи и транспорта, обычно необходимых для обмена данными между системами.

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

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

Подробнее об антикоррупционном слое:

person Davy Landman    schedule 26.05.2009
comment
Спасибо. Я проверю их прямо сейчас. Но я уже почувствовал, что этого мало. А примеров кода нет? :) - person Arnis Lapsa; 26.05.2009
comment
c-sharpcorner.com/UploadFile/rmcochran/ отлично понять шаблон адаптера :) - person Arnis Lapsa; 26.05.2009
comment
Ссылки Создание часто необходимого уровня защиты от коррупции (joeydotnet.com/blog/archive/2007/09/10/) и DDD - Уровень защиты от коррупции (goeleven.com/blog/entryDetail.aspx?entry=168) не работают - person Michael Freidgeim; 22.09.2012
comment
Я понимаю, что это очень давно, но чтобы ответить на OP, вы не найдете примеров кода для ACL. Слишком высокий уровень шаблонов и слишком много переменных для рецепта формочки для печенья. Мой совет: если ACL нужен только на жизненный цикл миграции и больше нет, тогда не увлекайтесь. Это не должно быть красиво. Просто напишите тесты и убедитесь, что все работает. Ключевым моментом здесь является целостность данных, а не производительность или красиво переработанный код. - person James; 13.03.2019
comment
открыта только одна из этих трех ссылок в конце - person João Otero; 22.03.2019