mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-16 22:23:45 +08:00
fix img
This commit is contained in:
@@ -463,7 +463,7 @@ function hide_canvas() {
|
||||
</code></pre>
|
||||
<p>这种业务编排的方式使得领域服务成为了领域场景的业务枢纽和逻辑起点,虽然利用分治原则避免了“上帝服务”的存在,但编排逻辑的方式仍然不可避免地导致领域模型对象之间的协作过于紧耦合,控制协作的成本也较高。作为控制中心的领域服务不是自治的,一旦领域逻辑和规则发生变化,就需要修改领域服务中的协作代码,无法独立演化。例如,在支付完成订单状态变更为“已支付”后,还需要发送短信通知买家时,就需要修改 PayingOrderService 领域服务,通过与 NotificationService 服务的协作实现通知逻辑。</p>
|
||||
<p>事件的解耦能力毋庸讳言。如果事件属于同一进程内领域设计模型的一部分,则为观察者模式(Observer)的体现。该模式定义了主体(Subject)对象与观察者(Observer)对象。一个主体对象可以注册多个观察者对象,而观察者对象则定义了一个回调函数,一旦主体对象的状态发生变化,就会通过调用回调函数,将变化的状态通知给所有的观察者。主体和观察者都进行了抽象,如此即可降低二者之间的耦合。C# 语言中的 Event 与 Delegate 相当于是观察者模式的语法糖。观察者模式的设计类图如下所示:</p>
|
||||
<p><img src="assets/d1eceab0-e0e8-11e9-baf7-f97ccb573723" alt="79599410.png" /></p>
|
||||
<p><img src="assets/d1eceab0-e0e8-11e9-baf7-f97ccb573723" alt="png" /></p>
|
||||
<p>观察者模式的意图为“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。”在基于对象范式的领域设计模型中,只要领域逻辑满足该意图,就可以运用观察者模式,与领域事件的建模思想无关。在 Java 语言的编程实现中,往往是由聚合作为主体,即使运用了观察者模式,也可能看不到领域事件的定义。例如,当订单的状态被更新为 Completed 时,若运用了观察者模式,就会在发生状态变更时通知事先注册的观察者对象 OrderCompletedHandler:</p>
|
||||
<pre><code class="language-java">public interface OrderCompletedHandler {
|
||||
void handle(Order order);
|
||||
|
||||
Reference in New Issue
Block a user