对比MVC和DDD
MVC(Model-View-Controller)和DDD(Domain-Driven Design)都是软件架构设计模式,用于构建应用系统内应用组件的代码架构,使得代码层级、代码结构、代码边界更清晰,更易于维护,是非常好的解决业务系统复杂性的办法,使得应用系统在长期迭代过程中的生命周期更长。
MVC(Model-View-Controller):是一种软件设计模式,用于将应用程序组件为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。
- 模型(Model):代表应用程序的数据逻辑,包括业务规则和数据,例如Service、DAO、DO/PO等对象。
- 视图(View):负责展示数据,通常是指用户界面,例如Html5。
- 控制器(Controller):处理输入,将用户的访问行为转化为对模型的操作,例如Controller。
MVC的主要优点是分离关注点,使得代码更加模块化,易于维护和扩展。它特别适用于构建用户界面丰富、数据和视图分离的应用程序,如Web应用程序。
DDD(Domain-Driven Design):是一种软件设计方法,其核心思想是:将与业务领域相关的知识引入软件开发过程中,并以此为基础进行软件设计。
- 领域(Domain):指特定业务的范畴,是业务专家与开发团队共同工作的领域,例如用户管理、保单管理等子领域。
- 模型(Model):基于业务领域的概念模型,是领域知识的直接体现,例如Service、Aggregate、Entity、ValueObject等对象。
- 语境(Context):定义模型元素的作用范围和上下文。
- DDD强调的是开发人员与业务专家之间的紧密合作,确保软件模型能够真实反映业务逻辑和业务规则。这有助于构建出更加灵活、易于理解且与业务紧密相关的应用软件系统。
应用场景
- MVC:适用于需要将业务逻辑与用户界面分离、业务逻辑简单、快速交付或试错的的业务系统,如JavaWeb应用程序、移动端应用程序等。
- DDD:适用于业务逻辑和业务规则复杂、业务领域范围和边界明显的业务系统(长生命周期),如银行保险(金融)、医疗健康、电商等领域的应用软件系统的开发。
MVC vs DDD架构设计,参考下图
DDD各层结构和调用链路
某金融企业应用系统内应用组件各层之间的调用链路,各层之间的输入和输出对象,参考下图
应用组件代码工程结构
某金融企业应用系统的代码工程结构,参考下图