Upload
gosharp
View
53
Download
3
Embed Size (px)
Citation preview
Anemic Domain Model - антипаттерн или SOLID ?
Влад Клековкинглавный разработчикСпециализированная Депозитарная Компания Гарант
Rich Domain ModelФаулер рекомендуетИнкапсуляцияИнтуитивно понятнаУдобна в использованииКрасивые диаграммы
Пример RDM
Чего хочет заказчик?Меняются требованияИногда законыПоявляются исключенияСпециальные пользователиОсобые клиенты
Вносим изменения
Типичный метод
GOD Object рядом
Anemic Domain ModelАнтипаттернНе очевидна в использованииНарушение инкапсуляцииПроцедурный стильУстарело?
Пример 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; }}
Пример ADM - Logic
Пример ADM - Logic
Инфраструктура
Конфигурируемая логика
Eдинственной обязанностиНа каждый класс должна быть возложена одна-единственная обязанность.
Открытости/закрытостиПрограммные сущности должны быть открыты для расширения, но закрыты для изменения.
Подстановки ЛисковФункции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.
Разделения интерфейсаМного специализированных интерфейсов лучше, чем один универсальный.
Инверсии зависимостейЗависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций
Следование SOLID
Сравнение
Вопросы
Ссылкиhttp://www.martinfowler.com/bliki/AnemicDomainModel.htmlhttp://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOodhttps://blog.inf.ed.ac.uk/sapm/2014/02/04/the-anaemic-domain-model-is-no-anti-pattern-its-a-solid-design/ http://stackoverflow.com/questions/258534/anemic-domain-model-pros-cons
Контакты[email protected]: pil00t
Спасибо