新书上架《领域特定语言》中文版,附一些感想

13-04-13 gameboyLV
刚在亚马逊上买了Martin Fowler的《领域特定语言》中文版:

http://www.amazon.cn/gp/product/B00BT9KOFM

看完前10章,发现有个问题:我们常用的DDD似乎是为了维护特定领域的状态和行为而存在的,例如一个RootEntity可以有方法,可以有状态,可以有数据,但是通常不会主动与其他RootEntity进行交互。

一个常用的解决方案就是引入事件总线,由事件总线来维护领域之间的通讯。这样做的好处是明显的,但是又引入了另外一个问题:怎样维护领域之间的业务流程?显然事件总线只有路由的功能,而没有工作流的功能。

如果由DSL来担当控制中枢的角色,eventbus负责消息传输,ddd处理业务逻辑,基于客户端的模板引擎负责渲染UI(例如 jquery template),这是多么美好的架构。。。

tangxuehua
2013-04-13 21:53
eventbus只是一种技术,用于广播消息的技术。

你说的缺少流程,实际上我觉得目前要实现DDD,还需要引入一个构造块,它的功能就像你所说就是负责实现业务流程,如OrderProcessManager,它负责实现整个订单处理流程,包括流程中某个步骤出现错误或超时后的补救机制(通过发送用于撤销或补救的command来实现),国外一般把这个构造块叫做saga或ProcessManager

gameboyLV
2013-04-13 22:31
洛奇能够让用户自定义宠物的AI逻辑,Second Life能够让用户自己创造物品并定义行为,这都是因为游戏事件是由脚本引擎驱动的。

而我们的业务系统确没有类似的模块,只能通过更改配置文件,实现接口来调整业务逻辑。想通过配置(而不是插件)来增加系统功能是完全不可能的,即使是微软的Dynamic CRM也不行。

猜你喜欢