代码改变世界

领域驱动设计之入门级教程(下)

2010-08-04 00:15  Virus-BeautyCode  阅读(2996)  评论(1编辑  收藏  举报

  在我们创建软件的时候,有很多的功能是和要解决的业务领域没有关系的,他们是软件的基础部件,或者是为软件服务的。例如:权限、日志、数据访问、文件访问、网络访问、用户界面等。最好将这部分功能从业务领域分离开来,独立出来,因为这部分功能是相对稳定的,这样既保证了这部分的独立性,便于升级维护,不至于影响业务领域的功能实现,同时将业务功能,业务规则尽可能放在业务逻辑处理层。这样在以后如果修改业务逻辑,不至于需要修改基础部件,或者是修改散落在各处的业务逻辑代码。

  还有一点好处就是利于自动化测试。可以对独立的模块进行自动化测试,以后修改模块或者重构模块,只要将模块对应的测试脚本跑一遍,没有问题的话,就说明修改或者重构是正确的,就可以集成到系统中。

  因此,分层就是这个作用。将不同关注点的功能独立在一个层中,保证层的内聚性,每一层只依赖它下面的一层,减少耦合和依赖。

  一个通用的领域驱动设计的架构性解决方案通常包含四层:

  •   用户界面层,负责用户界面的展示。
  •   应用层,处理用户的输入。
  •   领域层,包含领域的信息,业务的核心所在,业务对象的持久化交给下面的基础设施层。
  •   基础设施层,作为其他层的支撑存在。

  将应用划分为独立的层,并建立层之间的交换规则,也即是层的接口,是相当重要的。

  模块,一提起模块就好像进行面向过程开发时候的概念。其实在面向对象中,这个概念也是适用的。可以考虑先划分模块,保持模块的独立性,方便部署和重构,然后在每一个模块中应用分层的设计,便于层的升级和维护。最大限度的保持系统的可扩展性。

  领域驱动设计使得我们可以一直专注于用户的业务领域,不至于偏离方向,应该说是一个永不过时的指导原则。