DDD 跨上下文进行更改
DDD Making changes across contexts
假设我正在为一家保险公司编写软件。我使用 DDD,并且具有与客户帐户、地址和相关信息相关的实体的限界上下文。如果客户登录并对这些实体进行更改,这很简单。
但事实上,还有另一个门户供内部支持人员使用。现在,如果客户打电话更新他们的帐户信息(不是保单,而是 phone 号码、地址等)。最好和干净的方法是什么?
- 调用客户使用的限界上下文(HTTP 等)。
- 允许从内部门户进行更改(可能跨 database/schema 边界修改数据)。
- 引发有关更改对象的域事件,并在客户端应用程序上处理它(同样,这是与另一个上下文中的域对象相关的事件,我们不会从内部门户写入数据库)。
如果您的公司允许用户直接通过 phone 电话直接更改有关客户的信息,那么您已经回答了您的问题,这是您的系统应该允许的情况。这就是 DDD 关注域的内容,域是您示例中的业务逻辑,我看到上下文客户管理和其他一些使用此信息的上下文,但是如果有人需要更改有关客户的信息,这就是业务案例和系统应该允许这样做!
限界上下文的存在是因为它们在领域中有意义,并且存在于您的系统中。它们的存在并不是为了服务特定类型的用户或特定的客户端应用程序。事实上,最常见的情况是限界上下文服务于多种类型的用户和多个客户端应用程序,尤其是在具有面向客户的应用程序和后台办公室的软件系统中。
在您的 Insurance 域中,客户和后台用户都将直接与 CustomerManagement BC 交互,因为此 BC 为两者提供服务,而不仅仅是客户。同样的方式,客户和后台用户都可以看到客户的政策、他们的承保范围等。
从技术上讲,实施将取决于您的体系结构。两个客户端应用程序可以与相同的 API 通信,甚至可以共享端点。或者您可以为每个客户端提供一个 API,这些 API 将直接与同一个 BC 对话(调用相同的代码或通过远程调用相同的远程服务)。
假设我正在为一家保险公司编写软件。我使用 DDD,并且具有与客户帐户、地址和相关信息相关的实体的限界上下文。如果客户登录并对这些实体进行更改,这很简单。
但事实上,还有另一个门户供内部支持人员使用。现在,如果客户打电话更新他们的帐户信息(不是保单,而是 phone 号码、地址等)。最好和干净的方法是什么?
- 调用客户使用的限界上下文(HTTP 等)。
- 允许从内部门户进行更改(可能跨 database/schema 边界修改数据)。
- 引发有关更改对象的域事件,并在客户端应用程序上处理它(同样,这是与另一个上下文中的域对象相关的事件,我们不会从内部门户写入数据库)。
如果您的公司允许用户直接通过 phone 电话直接更改有关客户的信息,那么您已经回答了您的问题,这是您的系统应该允许的情况。这就是 DDD 关注域的内容,域是您示例中的业务逻辑,我看到上下文客户管理和其他一些使用此信息的上下文,但是如果有人需要更改有关客户的信息,这就是业务案例和系统应该允许这样做!
限界上下文的存在是因为它们在领域中有意义,并且存在于您的系统中。它们的存在并不是为了服务特定类型的用户或特定的客户端应用程序。事实上,最常见的情况是限界上下文服务于多种类型的用户和多个客户端应用程序,尤其是在具有面向客户的应用程序和后台办公室的软件系统中。
在您的 Insurance 域中,客户和后台用户都将直接与 CustomerManagement BC 交互,因为此 BC 为两者提供服务,而不仅仅是客户。同样的方式,客户和后台用户都可以看到客户的政策、他们的承保范围等。
从技术上讲,实施将取决于您的体系结构。两个客户端应用程序可以与相同的 API 通信,甚至可以共享端点。或者您可以为每个客户端提供一个 API,这些 API 将直接与同一个 BC 对话(调用相同的代码或通过远程调用相同的远程服务)。