Что такое Доменный объект и Предметная область, простым языком?

Начал изучать ООП и часто встречаю упоминание о Доменный объект и Предметная область. Особенно часто вижу их в контексте Репозитория. Поскольку к полному погружению в книги Эванса и Вернона еще не готов. Было прочитано множество статей и выборочно главы из данных книг. К сожалению, не совсем понял, даже поверхностно, что они из себя представляют. Я опишу как понимаю данные понятия, Вас попрошу исправить меня или дополнить.

Предметная область - представляет часть реального мира, которая должна быть реализована в нашей системе. Пример:

  1. Блог - создание и публикация
  2. Отдел кадров - учет сотрудников
  3. Аукцион - продажа товаров
Доменный объект - представляет собой основные значимые сущности, которые относятся к предметной области. Класс, который описывает основные аттрибуты и возможное поведение.
  1. Блог:
    • Запись/Пост
    • Читатель/Пользователь
    • Комментарий
  2. Отдел кадров:
    • Сотрудник
    • Подразделение
  3. Аукцион:
    • Товар
    • Покупатель/Пользователь
Доменный объект, который не содержит в себе ничего кроме аттрибутов, геттеров и сеттеров - называется Без кровным (Anemic) и является антипаттерном.
class Account
{
    private Id $id;
    private Balance $balance;
    private Status $status;
    private array $clients;
}

Доменный объект должен содержать всю бизнес-логику для работы с данным объектом.

class Account
{
    private Id $id;
    private Balance $balance;
    private Status $status;
    private array $clients;


    public function addClient(int $id);
    public function removeClient(int $id);
    public function rechargeBalance(int $amount);
}

Так же интересует, что означает "Уровень объектов предметной области" и "Уровень модели предметной области". О которых говорится в Вики


Ответы (0 шт):