Anemic Domain Model -
антипаттерн или SOLID ?
Влад Клековкин
главный разработчик
Специализированная Депозитарная Компания Гарант
Rich Domain Model
Фаулер рекомендует
Инкапсуляция
Интуитивно понятна
Удобна в использовании
Красивые диаграммы
Пример RDM
Чего хочет заказчик?
Меняются требования
Иногда законы
Появляются исключения
Специальные пользователи
Особые клиенты
Вносим изменения
Типичный метод
GOD Object рядом
Anemic Domain Model
Антипаттерн
Не очевидна в использовании
Нарушение инкапсуляции
Процедурный стиль
Устарело?
Пример ADM - Model
public 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.html
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
https://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
Контакты
kl.vlad@gmail.com
skype: pil00t
Спасибо

More Related Content

PDF
TPL Dataflow – зачем и для кого?
PDF
Живые приложения с Rx
PDF
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
PDF
UniversalApp "убийца" WPF или же это WPF+ ?
PDF
UI тестирование WPF приложений в Дойче Банке
PDF
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
PDF
За что не любить EF и чем его заменить
PDF
MVVM в WinForms – DevExpress Way (теория и практика)
TPL Dataflow – зачем и для кого?
Живые приложения с Rx
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
UniversalApp "убийца" WPF или же это WPF+ ?
UI тестирование WPF приложений в Дойче Банке
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
За что не любить EF и чем его заменить
MVVM в WinForms – DevExpress Way (теория и практика)

More from GoSharp (20)

PDF
Паттерны быстрой разработки WPF MVVM бизнес-приложений
PPTX
Gosharp Intro
PDF
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
PDF
Мониторинг приложений ASP.NET на основе сервиса Application Insights
PDF
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
PDF
ASP.NET Internals
PDF
Кросплатформенная разработка на ASP.NET vNext
PDF
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
PDF
Будущее ASP.NET
PDF
Коучинг команд разработки и коучинговые инструменты в работе тимлида
PDF
Взаимное влияние Source Code Management и других средств организации разработки
PDF
DevOPS инструменты для .NET проектов
PDF
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
PDF
Архитектурные решения при создании облачного сервиса на Asp.Net
PDF
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
PDF
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
PDF
Рейтинг навыков .NET-разработчика
PDF
Как попасть на следующий уровень карьеры и зарплаты в C#
PDF
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
PDF
Средства кросплатформенной разработки. Xamarin и ApperCode
Паттерны быстрой разработки WPF MVVM бизнес-приложений
Gosharp Intro
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
Мониторинг приложений ASP.NET на основе сервиса Application Insights
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
ASP.NET Internals
Кросплатформенная разработка на ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Будущее ASP.NET
Коучинг команд разработки и коучинговые инструменты в работе тимлида
Взаимное влияние Source Code Management и других средств организации разработки
DevOPS инструменты для .NET проектов
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
Архитектурные решения при создании облачного сервиса на Asp.Net
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как попасть в лучшие 5% при прохождении собеседования на удаленную работу в T...
Рейтинг навыков .NET-разработчика
Как попасть на следующий уровень карьеры и зарплаты в C#
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
Средства кросплатформенной разработки. Xamarin и ApperCode
Ad

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