16
Anemic Domain Model - антипаттерн или SOLID ? Влад Клековкин главный разработчик Специализированная Депозитарная Компания Гарант

Anemic Domain Model - антипаттерн или SOLID?

  • Upload
    gosharp

  • View
    53

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Anemic Domain Model - антипаттерн или SOLID?

Anemic Domain Model - антипаттерн или SOLID ?

Влад Клековкинглавный разработчикСпециализированная Депозитарная Компания Гарант

Page 2: Anemic Domain Model - антипаттерн или SOLID?

Rich Domain ModelФаулер рекомендуетИнкапсуляцияИнтуитивно понятнаУдобна в использованииКрасивые диаграммы

Page 3: Anemic Domain Model - антипаттерн или SOLID?

Пример RDM

Page 4: Anemic Domain Model - антипаттерн или SOLID?

Чего хочет заказчик?Меняются требованияИногда законыПоявляются исключенияСпециальные пользователиОсобые клиенты

Page 5: Anemic Domain Model - антипаттерн или SOLID?

Вносим изменения

Page 6: Anemic Domain Model - антипаттерн или SOLID?

Типичный метод

Page 7: Anemic Domain Model - антипаттерн или SOLID?

GOD Object рядом

Page 8: Anemic Domain Model - антипаттерн или SOLID?

Anemic Domain ModelАнтипаттернНе очевидна в использованииНарушение инкапсуляцииПроцедурный стильУстарело?

Page 9: Anemic Domain Model - антипаттерн или SOLID?

Пример ADM - Modelpublic class MyMegaDocument : Document, IWithStatus, IStartFinishDates, IPriceSumCount{ public string Name { get; set; } public Status Status { get; set; } public DateTime StartDate { get; set; } public DateTime FinishDate { get; set; } public decimal Price { get; set; } public decimal Count { get; set; } public decimal Summ { get; set; } ...}

interface IWithStatus{ Status Status { get; set; }}

interface IStartFinishDates{ DateTime StartDate { get; set; } DateTime FinishDate { get; set; }}

interface IPriceSumCount{ decimal Price { get; set; } decimal Count { get; set; } decimal Summ { get; set; }}

Page 10: Anemic Domain Model - антипаттерн или SOLID?

Пример ADM - Logic

Page 11: Anemic Domain Model - антипаттерн или SOLID?

Пример ADM - Logic

Page 12: Anemic Domain Model - антипаттерн или SOLID?

Инфраструктура

Page 13: Anemic Domain Model - антипаттерн или SOLID?

Конфигурируемая логика

Page 14: Anemic Domain Model - антипаттерн или SOLID?

Eдинственной обязанностиНа каждый класс должна быть возложена одна-единственная обязанность.

Открытости/закрытостиПрограммные сущности должны быть открыты для расширения, но закрыты для изменения.

Подстановки ЛисковФункции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

Разделения интерфейсаМного специализированных интерфейсов лучше, чем один универсальный.

Инверсии зависимостейЗависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций

Следование SOLID

Page 15: Anemic Domain Model - антипаттерн или SOLID?

Сравнение