在域驱动设计的 CQRS 实现中,命令/查询的单独应用程序服务?
Separate application service for command / query in CQRS implementation in Domain Driven Design?
在使用领域驱动设计实现 CQRS 时,我们将命令界面与查询界面分开。
我的理解是,在域级别,这会显着降低域模型的复杂性(尤其是在使用事件源时),您的读取模型将不同于您的写入模型。因此,对于您的读写限界上下文,这看起来像是一个单独的域服务。
在应用层,我们域的读写分离是否需要单独的应用服务?
在这件事上我一直在唱反调。我的想法是,要求客户知道其中的区别可能有点矫枉过正。但后来我想到了一个消耗性的 web 服务可能会如何使用它。一般读会发出get请求,写会发出post,也就是说已经知道了
我看到了更清洁的应用程序服务的好处。
真正的价值在于拥有一个正确分离的读取和域模型。他们做根本不同的事情。并且通常具有非常不同的形状。例如,读取模型完全有可能包含来自不同领域对象的混合数据。
当您考虑它们的使用方式以及应用程序中的功能方式时,您会开始意识到分离的必要性。这里的经典示例是考虑与典型应用程序中的读取次数相比的写入次数。读取数量远远超过写入数量。通过保持差异,您可以针对各自的角色优化每一方。
要记住的另一个方面是 'post' 将构成一个命令,而不是一个可能包含读取模型的视图模型。如果使用 CQRS 方法,您需要调整查询和 post 的方式。事实上,您可以获得更具描述性的语言,而不是简单地将视图模型来回反映到服务器。
如果您感兴趣,我有一篇博客 post,其中概述了典型 CQRS 架构的高级概述。您可以在这里找到它:A step by step overview of a typical CQRS application。希望你觉得它有用。
最后一点。我们正在添加新功能,并且发现分离非常有帮助。对一侧的更改不会以与它们可能相同的方式影响另一侧。
在使用领域驱动设计实现 CQRS 时,我们将命令界面与查询界面分开。
我的理解是,在域级别,这会显着降低域模型的复杂性(尤其是在使用事件源时),您的读取模型将不同于您的写入模型。因此,对于您的读写限界上下文,这看起来像是一个单独的域服务。
在应用层,我们域的读写分离是否需要单独的应用服务?
在这件事上我一直在唱反调。我的想法是,要求客户知道其中的区别可能有点矫枉过正。但后来我想到了一个消耗性的 web 服务可能会如何使用它。一般读会发出get请求,写会发出post,也就是说已经知道了
我看到了更清洁的应用程序服务的好处。
真正的价值在于拥有一个正确分离的读取和域模型。他们做根本不同的事情。并且通常具有非常不同的形状。例如,读取模型完全有可能包含来自不同领域对象的混合数据。
当您考虑它们的使用方式以及应用程序中的功能方式时,您会开始意识到分离的必要性。这里的经典示例是考虑与典型应用程序中的读取次数相比的写入次数。读取数量远远超过写入数量。通过保持差异,您可以针对各自的角色优化每一方。
要记住的另一个方面是 'post' 将构成一个命令,而不是一个可能包含读取模型的视图模型。如果使用 CQRS 方法,您需要调整查询和 post 的方式。事实上,您可以获得更具描述性的语言,而不是简单地将视图模型来回反映到服务器。
如果您感兴趣,我有一篇博客 post,其中概述了典型 CQRS 架构的高级概述。您可以在这里找到它:A step by step overview of a typical CQRS application。希望你觉得它有用。
最后一点。我们正在添加新功能,并且发现分离非常有帮助。对一侧的更改不会以与它们可能相同的方式影响另一侧。