Eric 在他的书中很少涉及模块的主题。他也没有通过示例讨论模块结构与有界上下文的关系。限界上下文是否包含模块或模块包含限界上下文?当应用程序具有 DDD 时,它的可扩展性有多容易?
在我们设计可扩展应用程序时,应用程序的结构非常重要。Microsoft MEF 框架可以从 dll 中自动发现模块/组件。
让我们举个例子。在电子商务应用程序中,我们可以有一个用于支付处理的有界上下文。支付处理可以是抽象的,因此我可以稍后使用更多支付处理器(如 Paypal 或 Payflow)扩展应用程序。目前我只有Paypal,几个月后我想整合Payflow。要集成 Payflow,我可以有一个实现Payment Processing接口的程序集(一个 dll) 。我可以将该 dll 放到应用程序中,MEF 会自动发现它。
这里的挑战是,为 PayFlow 支付处理创建的 dll 是一个模块,而不是有界上下文 (BC)。如果我将其创建为 BC,我们有两个 BC 用于Payment Processing。(为 Paypal 创建的 BC 和为 Payflow 创建的 BC)。如果我们使用限界上下文中的模块和限界上下文作为程序集 (dll) 构建应用程序,则模块可以作为文件夹而不是程序集驻留在 BC 中(您可以将其视为在 Visual Studio 中创建的 C# 库)。
我们如何使用 DDD 处理这个可扩展性问题?Payment Processing ,一个 BC和它下面的不同文件夹作为模块,一个用于 Paypal 等......还是我们需要在另一个 BC 中的 sub-BC?