关于对DDD应用层的疑惑

10-05-16 glenko
在《领域驱动设计》中提到了应用层。有人说发短信属于应用层的东西。比如说工作流中某人审批成功后,系统会自动发送一条短信通知下一处理人,那么在应用层可以有一个handle()的审批方法,它会调用领域层中的审批方法,成功之后应用层的handle会接着调用基础结构层的相关类及方法发送短信通知。

我的疑问就是:

1、如果不需要发送短信通知的话,应用层就只调用领域层的审批方法,相当于一个门面。这时候应用层还有没有必要呢?

2、另外,是不是显示层编码者只能调用应用层,而不能调用领域层?那这样的话,应用层就更像个门面了。比如对User模块的操作,如果显示层编码者只需要添加用户功能,是不是应用层就只需提供addUser()方法,这个方法调用领域层或者基础结构层的addUser()方法呢?虽然在领域层或者基础结构层现在已经有了删除用户的方法,但是此时显示层编码者不需要,应用层是不是就不需要提供该服务了呢?

虽然例子太过于简单,或许不需要用领域驱动的方式进行系统设计。但是如果这个能讲明白了,延伸到复杂系统的话就好理解多了。

谢谢各位有见解之仕给予指点!

    

1
FredWang
2010-06-10 00:49
同疑惑中,我现在只能理解为一个统一的消息接口,同时可以cross-cutting一些基础结构的功能。

banq
2010-06-10 08:25
2010年05月16日 20:28 "glenko"的内容
应用层就只调用领域层的审批方法 ...

领域驱动设计,就应该领域层调用应用层,你有这个问题是因为你认为领域层是被驱动调用的,还是静态数据驱动思维。

FredWang
2010-06-10 21:21
banq大大

我的理解,app service 应该是在domain 上方的与presentation model的统一消息平台,解耦presentation model与 domain ,薄而无状态。

我是做.net的,目前手上一个项目是这样分的,请指教

client-> View -> presentation model -> Command bus(如果是查询则不走)-> App service( WCF)-> Domain -> Infrastructure

个人的感觉,presentation model上的大部分是类似DTO的对象,展示用的,SOA返回的消息也是类似DTO的东西。这样能比较好的解耦presentation model和Domain的关系。

如果是command则构造有意义DSL 命令,交给SOA接口,由SOA接口代理给Domain。

请指教。

猜你喜欢