DDD может часть домена находится в инфраструктуре?

DDD может часть домена находится в инфраструктуре?
DDD может часть домена находится в инфраструктуре? - nseylubangi @ Unsplash

Во-первых, мне жаль говорить, что не существует такого понятия, как "идти по правилам". Все зависит от интерпретации, которая в случае с DDD, к сожалению, имеет очень большие отклонения. Даже Эрик Эванс, кажется, пересмотрел некоторые вещи после выхода книги. Что, в общем-то, нормально, мы все постоянно учимся.

TLDR: Использовать другие "особенности" - хорошо, влиять на другие особенности обратно - не хорошо.

Например, вы используете библиотеку протоколирования. Это использование чего-то, что вы, очевидно, не будете менять (я надеюсь). Использование функции "часы работы" также подходит по той же причине.

Не нормально, когда у вас есть срез "manage_account", иногда люди делают "accounts" (множественное число), или подобное. Это потому, что как только вам, как другому срезу, понадобятся некоторые данные в аккаунте, вы повлияете на аккаунт, чтобы получить эти данные. У вас будет физическая зависимость от "manage_account", но "manage_account" также будет иметь семантическую зависимость от вашего модуля.

Другими словами, если кто-то посмотрит на "manage_account" сам по себе, возникнут вопросы типа: Почему это здесь? Он никогда не используется! Он здесь потому, что кто-то другой использует его. Для чего-то. Или использует?

Это вызывает своего рода круговую зависимость. Что плохо для понимания и поддержки модуля.

Не каждая функция должна быть постоянной. Так что да, "OpeningHours" может быть "функцией". Я бы назвал это скорее "библиотекой", но я не думаю, что категоризация имеет такое большое значение :)

Короче говоря:

  1. Хранение вещей - это не функция. Это максимум техническая часть функции.
  2. Использование функций - это нормально. До тех пор, пока не нарушается правило №1, т.е. он не используется для хранения данных, вместо этого вы действительно используете отдельно определенные, значимые (в бизнес-смысле) функции.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - Domain Driven Design (DDD), Предметно ориентированный дизайн

Прикрепленное видео 2 - Владимир Хориков — Validaton and DDD

Прикрепленное видео 3 - Владимир Хориков — Domain-driven design: Cамое важное


LetsCodeIt, 4 января 2023 г., 14:12