Size: a a a

Software Design/Architecture/Zen

2020 September 27

СП

Сергей Предводителев... in Software Design/Architecture/Zen
На истину не претендую, сам только пытаюсь в этом всем разобраться.
источник
2020 September 28

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Подскажите по реализации принципов DDD.

Есть приложение, в котором есть два ограниченных контекста, в каждом из которых есть сущность клиент. Общее между контекстами у них только имя:

Бухгалтерия
Клиент: id, name, ...

Производство
Клиент: id, name, ...

Менять имя может как производство, так и бухгалтерия.

Каким образом реализовать синхронизацию имён клиентов?
1) Хранить общие данные в одной и той же таблице в БД, но тогда разные контексты будут использовать одну и туже таблицу для своих агрегатов.

2) Использовать события, но тогда контекстам нужно будет подписывать друг на друга, тоже не хорошо.


Наверняка есть более правильный способ?
источник

¿

¿hope in Software Design/Architecture/Zen
Сергей Предводителев
Подскажите по реализации принципов DDD.

Есть приложение, в котором есть два ограниченных контекста, в каждом из которых есть сущность клиент. Общее между контекстами у них только имя:

Бухгалтерия
Клиент: id, name, ...

Производство
Клиент: id, name, ...

Менять имя может как производство, так и бухгалтерия.

Каким образом реализовать синхронизацию имён клиентов?
1) Хранить общие данные в одной и той же таблице в БД, но тогда разные контексты будут использовать одну и туже таблицу для своих агрегатов.

2) Использовать события, но тогда контекстам нужно будет подписывать друг на друга, тоже не хорошо.


Наверняка есть более правильный способ?
Делайте как привычнее
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
¿hope
Делайте как привычнее
Я только постигаю это всё, нет привычнее :)
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Ещё вариант

3) сделать возможность изменять данные общие только в одном контексте и делать событие соответствующее, на которое будут подписываться другие контексты.
источник

ch

central hardware in Software Design/Architecture/Zen
Сергей Предводителев
Подскажите по реализации принципов DDD.

Есть приложение, в котором есть два ограниченных контекста, в каждом из которых есть сущность клиент. Общее между контекстами у них только имя:

Бухгалтерия
Клиент: id, name, ...

Производство
Клиент: id, name, ...

Менять имя может как производство, так и бухгалтерия.

Каким образом реализовать синхронизацию имён клиентов?
1) Хранить общие данные в одной и той же таблице в БД, но тогда разные контексты будут использовать одну и туже таблицу для своих агрегатов.

2) Использовать события, но тогда контекстам нужно будет подписывать друг на друга, тоже не хорошо.


Наверняка есть более правильный способ?
То есть как делать синхронизировать? Вы дублирует данные в 2 базы? Одни и те же?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
central hardware
То есть как делать синхронизировать? Вы дублирует данные в 2 базы? Одни и те же?
База данных одна здесь, но теоретически может появится контекст как микросервис и там тоже будет клиент и у него будет имя
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Сергей Предводителев
Подскажите по реализации принципов DDD.

Есть приложение, в котором есть два ограниченных контекста, в каждом из которых есть сущность клиент. Общее между контекстами у них только имя:

Бухгалтерия
Клиент: id, name, ...

Производство
Клиент: id, name, ...

Менять имя может как производство, так и бухгалтерия.

Каким образом реализовать синхронизацию имён клиентов?
1) Хранить общие данные в одной и той же таблице в БД, но тогда разные контексты будут использовать одну и туже таблицу для своих агрегатов.

2) Использовать события, но тогда контекстам нужно будет подписывать друг на друга, тоже не хорошо.


Наверняка есть более правильный способ?
Как имя влияет на логику внутри каждого из двух контекстов? Есть инварианты которые привязаны к этим данным? Аля "бухгалтерия - всем маркам начислить чего" и на производстве "всем дикам другая норма"

Подозреваю что ответ "никак не влияет надо ток на ui показывать. В этом случае скорее всего есть третий контекст который хранит контакты клиентов (как их звать и как связаться) а у твоих контекстов этих данных нет

P.s. контексты не должны иметь общих данных. Можно только айдишки. Копировать данные в целом можно но оч опасно и надо 10 раз подумать нет ли других вариантов
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Sergey Protko
Как имя влияет на логику внутри каждого из двух контекстов? Есть инварианты которые привязаны к этим данным? Аля "бухгалтерия - всем маркам начислить чего" и на производстве "всем дикам другая норма"

Подозреваю что ответ "никак не влияет надо ток на ui показывать. В этом случае скорее всего есть третий контекст который хранит контакты клиентов (как их звать и как связаться) а у твоих контекстов этих данных нет

P.s. контексты не должны иметь общих данных. Можно только айдишки. Копировать данные в целом можно но оч опасно и надо 10 раз подумать нет ли других вариантов
Хм... То есть вытягивать эти данные только в представлении.

В моем случае это все решает.

Вроде решение на поверхности, но не додумался.

Спасибо большое за подробный ответ!
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Добрый день!

Изучаю подход DDD. Подскажите, пожалуйста, как быть в таких ситуациях.

Есть контекст Компания, в котором есть сущность Клиент (поля id, name)

Есть контекст Производство, в котором есть сущность Проект (поля id, client_id)

Как решить задачу: вывести постраничный список клиентов, у которых есть проекты, отсортировав его по имени?

Клиентов/проектов много, поэтому получить все client_id из Производство и запросить клиентов в Компания не выйдет.

Просто список можно вывести, запрашивая по порциям client_id из Производство.

А вот как вывести постранично именно отсортированный список не понятно :(
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Сергей Предводителев
Добрый день!

Изучаю подход DDD. Подскажите, пожалуйста, как быть в таких ситуациях.

Есть контекст Компания, в котором есть сущность Клиент (поля id, name)

Есть контекст Производство, в котором есть сущность Проект (поля id, client_id)

Как решить задачу: вывести постраничный список клиентов, у которых есть проекты, отсортировав его по имени?

Клиентов/проектов много, поэтому получить все client_id из Производство и запросить клиентов в Компания не выйдет.

Просто список можно вывести, запрашивая по порциям client_id из Производство.

А вот как вывести постранично именно отсортированный список не понятно :(
Что тут непонятного? Индекс натянуть и тянуть из базы курсором
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Apache DOG™
Что тут непонятного? Индекс натянуть и тянуть из базы курсором
это два разных контекста, может быть две отдельных БД
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Сергей Предводителев
это два разных контекста, может быть две отдельных БД
Вы сейчас серьезно?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Apache DOG™
Вы сейчас серьезно?
да
источник

AP

Artem Prosvetov in Software Design/Architecture/Zen
Сергей Предводителев
Добрый день!

Изучаю подход DDD. Подскажите, пожалуйста, как быть в таких ситуациях.

Есть контекст Компания, в котором есть сущность Клиент (поля id, name)

Есть контекст Производство, в котором есть сущность Проект (поля id, client_id)

Как решить задачу: вывести постраничный список клиентов, у которых есть проекты, отсортировав его по имени?

Клиентов/проектов много, поэтому получить все client_id из Производство и запросить клиентов в Компания не выйдет.

Просто список можно вывести, запрашивая по порциям client_id из Производство.

А вот как вывести постранично именно отсортированный список не понятно :(
Зачем использовать DDD при чтении?)
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Сергей Предводителев
Добрый день!

Изучаю подход DDD. Подскажите, пожалуйста, как быть в таких ситуациях.

Есть контекст Компания, в котором есть сущность Клиент (поля id, name)

Есть контекст Производство, в котором есть сущность Проект (поля id, client_id)

Как решить задачу: вывести постраничный список клиентов, у которых есть проекты, отсортировав его по имени?

Клиентов/проектов много, поэтому получить все client_id из Производство и запросить клиентов в Компания не выйдет.

Просто список можно вывести, запрашивая по порциям client_id из Производство.

А вот как вывести постранично именно отсортированный список не понятно :(
читай про Read Model

DDD тут не при чем.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Anton Lakotka
читай про Read Model

DDD тут не при чем.
Я читал, но не понимаю как это поможет в случае, когда это две разные БД
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
из подходов DDD  тебе в данном случае подойдут доменные события и единый язык.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Anton Lakotka
из подходов DDD  тебе в данном случае подойдут доменные события и единый язык.
дублировать данные?
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Кроссбазовых транзакций не изобрели и оно должно лежать в одной базе
источник