Эрик в своей книге очень мало затрагивает тему Модулей. Он также не говорит о связи структуры модулей с ограниченным контекстом с примерами. Ограниченные контексты содержат модули или модули, содержащие ограниченные контексты? Когда приложение имеет DDD, насколько легко его можно продлить?
Структура приложения очень важна при проектировании расширяемых приложений. Структура Microsoft MEF может автоматически обнаруживать модули/компоненты из dll.
Возьмем пример. В приложении электронной коммерции мы можем иметь ограниченный контекст для Обработки платежей. Обработка платежей может быть абстрактной, поэтому я могу позже расширить приложение с помощью большего количества Платежных Процессоров, таких как Paypal или Payflow. В настоящее время у меня есть только Paypal, и несколько месяцев спустя я хочу интегрировать Payflow. Чтобы интегрировать Payflow, у меня может быть сборка (dll), которая реализует интерфейс Обработка платежей. Я могу отбросить эту DLL в приложении, и MEF автоматически обнаружит ее.
Проблема в том, что DLL, созданная для обработки платежей PayFlow, является модулем, а не ограниченным контекстом (BC). Если я создал его как BC, у нас есть две BC для Обработка платежей. (BC создан для Paypal и BC для Payflow). Если мы структурируем приложение с модулями внутри ограниченного контекста и ограниченного контекста в качестве сборки (dll), модули могут находиться в BC как папки, а не сборки (вы можете думать об этом как о библиотеке С#, созданной в Visual Studio).
Как мы можем справиться с этой проблемой расширяемости с помощью DDD? Является Обработка платежей, BC и разные папки под ним в качестве модулей, один для Paypal и т.д. Или нам нужен суб-BC внутри другого BC?