领域驱动设计和开发实战2011-08-14 infoq 译:王丽娟背景领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中。大部分关于此主题的著作 和文章都以Eric Evans的书《领域驱动设计》为基础,主要从概念和设计的角度探讨领域建模和设计情况 。这些著作讨论实体、值对象、服务等DDD的主要内容,或者谈论通用语言、界定的上下文(Bounded Context)和防护层(Anti-Corruption Layer)这些的概念。本文旨在从实践的角度探讨领域建模和设计,涉及如何着手处理领域模型并实际地实现它。我们将着 眼于技术主管和架构师在实现过程中能用到的指导方针、最佳实践、框架及工具。领域驱动设计和开发也 受一些架构、设计、实现方面的影响,比如:业务规则持久化缓存事务管理安全代码生成测试驱动开发重构本文讨论这些不同的因素在项目实施的整个生命周期中怎样对其产生影响,还有架构师在实现成功的 DDD中应该去寻求什么。我会先列出领域模型应该具备的典型特征,以及何时在企业中使用领域模型(相 对于根本不使用领域模型,或使用贫血的领域模型来说)。文章包括一个贷款处理示例应用,来演示如何将设计立场、以及这里讨论的开发最佳实践,应用在真 实的领域驱动开发项目之中。示例应用用了一些框架去实现贷款 处理领域模型,比如Spring、Dozer、 Spring Security、JAXB、Arid POJOs和Spring Dynamic Modules。示例代码用Java编写,但对大多数开 发人员来说,不论语言背景如何,代码都是很容易理解的。引言领域模型带来了一些好处,其中有:有助于团队创建一个业务部门与IT部门都能理解的通用模型,并用该模型来沟通业务需求、数据实体 、过程模型。模型是模块化、可扩展、易于维护的,同时设计还反映了业务模型。提高了业务领域对象的可重用性和可测性。