Я делаю приложение с использованием принципов DDD. Подумав обо всем, насколько я могу, я начинаю создавать свои ограниченные контексты. Я еще не установил окончательную структуру, но на данный момент мое приложение будет состоять из следующих ограниченных контекстов:
- Управление сотрудниками
- Приобретение
- Архив
- Отчеты
Я хочу, чтобы это было максимально гибким, поэтому я могу, например, развить и поддерживать их отдельно. Вероятно, они будут подвергать WCF или Web API взаимодействию с ними.
Я буду использовать реализацию Udi Dahans простого шаблона CQRS. Я бы предпочел не останавливаться на событиях с использованием источников событий, сообщений и т.д., Потому что это не будет очень совместное приложение (менее 1000 пользователей, и они вряд ли будут редактировать один и тот же небольшой набор данных), и это добавьте много ненужной сложности.
Итак, на вопросы:
Учреждения сотрудника и отдела являются общими для всех ВС, как моделировать это?
Отдел является частью организационной структуры, поэтому в управлении сотрудниками BC сотрудники работают в отделе, они могут управлять отделом, и у них есть история отделов, над которыми они работали.
При покупке товара BC покупаются в отделе и доставляются в отдел. У Suplliers разные контракты с разными отделами.
В архиве некоторая информация будет архивироваться и привязана к отделу и т.д.
То же самое относится и к сотрудникам.
Как сохранить данные из ограниченного контекста?
Они могут быть сопоставлены с одной базой данных или у каждого есть свои собственные.
Некоторые мысли, которые я сделал до сих пор
Как моделировать
Должен ли я сделать еще один BC под названием "Компания" или "Организация" и управлять отделами там?
В соответствии с вышеизложенной статьей Udi Dahans, я должен создать сущность подразделения и сущность сотрудника для каждого BC с только полями и поведением, которые мне нужны для этого BC. Это звучит разумно, но тогда я думаю о том, как на самом деле использовать это, и я не могу понять это. Мне нужно получить доступ к отделам, которые управляются где-то еще, но как именно я это делаю, а не смешивать свои BC?
Как использовать?
Скажем, что я получаю список отделов от somwhere путем запросов. В пользовательском интерфейсе я получаю список отделов, которые я тоже хочу сделать. Это первая покупка для этого отдела, поэтому покупка BC еще не знает об этом отделе... Итак, объект отдела в приобретении BC будет заполнен данными, хранящимися в anoher BC - так как я могу это сохранить? Мне нужно добавить некоторую информацию, такую как адрес доставки и адрес счета-фактуры, если этого не существует?
В "интерфейсе отдела регистров" я должен затем вызвать услугу "RegisterDepartment" на всех БС, а затем сделать так, чтобы они синхронизировались со всеми изменениями, выполненными через пользовательский интерфейс (MVC-контроллер)?
То же самое с сотрудниками. Я хочу знать, какой сотрудник совершил покупку или что-то поместил в архив. Поэтому мне как-то понадобился бы сотрудник-объект в этих БК, но он мог бы управлять ими из другого БК.
Сохранение
Некоторые из вышеперечисленных задач могут быть решены путем сопоставления различных объектов-сотрудников в одной таблице в базе данных. Приобретение BC и Archive BC не может регистрировать новых сотрудников, а добавлять информацию тем, кто там, и привязывать их к другим объектам в одной базе данных. Тогда в базе данных будет сказано, что все ВС до сих пор живут в одном мире...
Мне нужен совет, поэтому я не делаю то, что будет очень сложно поддерживать позже.