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

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

Jul 17, 2015

Download

Technology

GoSharp
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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?

Сравнение