Pull to refresh
72
0
Пешков Евгений @GraDea

Развиваю DDDevotion💪

Send message

В общем случае домен != контекст != микросервис. Есть отличная статья на эту тему https://vladikk.com/2018/01/21/bounded-contexts-vs-microservices/

Самый большой и основной опыт я получил в Додо (не знаю как переложить на приложения), до этого те или иные паттерны тоже использовал.

В комментах голубым нельзя  ¯\_(ツ)_/¯

Кощунственно выделять некликабельные тезисы и термины голубым)

По нормам борт Моралеса не был гражданским и вроде как его принудительно не сажали. Просто воспользовались правом закрыть свое пространство.
Из мемуаров ветеранов Великой Отечественной Войны мы узнаём, что фронтовик заранее знал куда упадет снаряд, и где пролетит пуля.

Тот кто «знал», но оказался не столь везучим, не смог написать мемуаров.

В день на дорогах РФ гибнет порядка 100 человек или 30к человек в год.

Когда-то было так. Сейчас ближе к 15к. Ремни, улучшение дорожной сети и камеры все таки сделали свое дело
Попадалось несколько раз, но толком не помню. Можно посмотреть паттерн Space Based в Fundamentals of Software Architecture
Есть преимущественно англоязычный слак про DDD, CQRS и т.п. join.slack.com/t/ddd-cqrs-es/shared_invite/zt-m3vf3alt-S3L~YUoIV88wekj6wSNrUQ
Непонятно насколько большая конкурентность за один айтем.

Есть подходы для высококонкурентных запросов, например билеты на матч в старт продаж.
Но если у вас не столь конкурентный паттерн, то я бы делал в том же ключе, что и oxidmod
В чате сообщества @dddevotion недавно обсуждали аренду велосипедов. Можно поискать к чему коллективный разум пришел.
Наверное, может, но есть сложность с транзакционными границами. Агрегат необходимо сохранять в транзакции целиком и обратно вычитывать тоже в транзакции*.

на самом деле не все разделяют это мнение
Допустима ленивая загрузка. Подробнее в статье.

Сложно сказать где оригинальный источник, но перевод уже был на Хабре https://m.habr.com/en/company/flant/blog/419733/ За пару лет немного поменялось, правда)

Соглашусь, наверное.

Поправил в примере на вариант CanAddProduct.
Приватный IsValid добавлен с целью показать, что агрегат может отказаться добавлять что-то в себя, если посчитает такой продукт невалидным для своего состояния, нарушающим его инвариант.
Каждая из этих областей будет в обязательном порядке использовать какую-то часть функций из клиентского ордера.

Это если вы хотите построить универсальную модель. В статье я отговариваю от этого и считаю анти-паттерном.

Ну а все дальнейшие размышления идут насчет того как скрестить DDD и универсальную модель.

В идеале никак, но есть большая часть DDD про contexts map – там все расписывается, в том числе и shared kernel.
Конечно может. Во-первых, обойдемся без деления на админскую часть и клиентскую. Есть доменная сущность и операции с ней. Делить по пользовательскому интерфейсу — плохая задумка. Если вы хотите разделить эти агрегаты, то скорее всего придется разделить и хранение. И перейти к eventual consistency.

Второе, ОрдерРекорд — не анемичная модель. Это по сути readonly модель без логики и сеттеров.
Если хочется переиспользовать и операции прям одинаковые, и сторадж используется тот же самый, то для грида вытаскиваем только ссылки и номера заказов. Можно и больше данных (сумма, например) для чтения. Это нарушение чистоты для перформанса. А уже при открытии конкретного заказа загружаем наш агрегат.
Типичное Разделяй и властвуй. Когда у вас контекст ограничен, команда может сосредоточено пилить этот контекст. Не надо держать в голове 100500 связей с остальными контекстами.
Чем больше продукт и команда, тем сложнее процессы, независимо от того используется ли DDD или исключительно BBoM. Но DDD позволяет управлять возрастающей сложностью.
Про базу.
В идеале наша модель чиста и не зависит от внешних вызовов. Но не всегда это так и агрегат может использовать внешние сервисы для похода в базу и подобного.

Information

Rating
Does not participate
Date of birth
Registered
Activity