尽管MVC依然是当前设计UI的首选方案,但随着他的流行,也有很多对他的批评.实际上,大多数的批评都指向了该模式的错误用法.
1.贫血的领域模型
Eric Evans编写过一本很有影响力的书,名为<领域驱动设计>,在这本书中,定义了一组架构规则,能够指导我们更好的将业务领域集成到代码之中.
其中有一项核心的理念就是将面向对象的范式应用到领域对象之中.如果违背这一原则的话,就会被称之为贫血的领域模型(Anemic Domain Model)
贫血的领域模型通常来讲会具有如下的症状:
(1)模型是由简单老式的JAVA对象(plain old java object,POJO)说构成的,只有getrer和setter方法;
(2)所有业务逻辑都是在服务层处理的
(3)对模型的校验会在本模型外部进行,例如在控制器中
根据业务领域的复杂性不同,这可能是一种较差的实践方式,通常来讲,DDD实践需要付出额外的努力,将领域从应用逻辑中分离出来.
架构通常都是一种权衡,需要注意的是,设计spring应用的典型方式往往会在这个过程中导致系统在可维护性上变得较为复杂.
(1)服务层适合进行应用级别的抽象(如事务处理),而不是业务逻辑.
(2)领域对象应该始终处于合法的状态,通过校验器或JSR-303的校验注解,让校验过程在表单对象中进行.
(3)将输入转换为有意义的领域对象
(4)将数据层按照repository的方式来实现,Repositiory中会包含领域查询
(5)将领域逻辑与底层持久化框架解耦
(6)尽可能使用实际对象,例如操作FirstName类而不是操作String
DDD所涉及的内容远不止上述的规则:实体(Entity),值类型(value type),通用语言(ubiquitous Language),限界上下文(bounded context),洋葱架构(onion architecture)以及防腐化层(anti corruption layer),我强烈建议你自行学习一下这些原则.