三层构架和 MVC 不同吗?
做企业应用开发时,经常采用三层架构分层:表示层、业务层、持久层。
- 持久层:采用 DAO 模式,建立实体类和数据库表映射(ORM 映射)。也就是哪个类对应哪个表,哪个属性对应哪个列。持久层的目的就是,完成对象数据和关系数据的转换。
- 业务层(逻辑层、service 层):将一个业务中所有的操作封装成一个方法,同时保证方法中所有的数据库更新操作,即保证同时成功或同时失败。避免部分成功部分失败引起的数据混乱操作。
- 表示层负责接收用户请求、转发请求、显示数据等等。
这三个分层,每一层都有不同的模式,就是架构模式。表示层最常用的架构模式就是MVC。
因此,MVC是三层架构中表示层最常用的架构模式。
MVC - 模型、视图、控制器。总有人来个什么模型层、视图层、控制器层,哪里来的这么多层?是不是还要来个Service层、DAO层、DTO 层?
层,英文是tier(物理上)、layer(逻辑上)。既是层,个人理解就有上下关系,模型、视图、控制器有上下关系?否则,依赖倒转原则(高层不依赖于低层,二者都依赖于抽象)指的是啥?
三层架构,每层都有自己的模式,模式就是套路(杨氏太极拳十八式,就是套路),每一层都有自己的套路,就是所谓架构模式。
表示层最常用的套路、模式就是MVC ,MVC就是表示层的一种架构模式。
业务层的架构模式有事务脚本模式、领域模型模式、CQRS 等等(另一种说法是贫血、失血、充血、胀血...)。
持久层的架构模式有入口模式、数据映射器模式等等。
一般来说,框架 > 架构模式> 设计模式 > 设计原则。打个比方,Hibernate是一个持久层框架,是数据映射器模式的具体实现,实现时用到了工厂模式等很多设计模式,体现了什么依赖倒转原则、开闭原则、里氏替换原则等等设计原则。AngularJS是一个客户端 MVC 框架,是 MVC架构模式的一种实现,实现时用到。。。。设计模式,体现了。。。。等设计原则。Struts/http://ASP.NET MVC是表示层框架。。。。。诸如此类。
有个疑惑,既然表示层用了mvc,那mvc中不是有个model是负责与数据库操作的类,与三层中的持久层层不冲突吗?
表示层的model中是页面视图上的数据,也就是经过业务层处理后的最终数据;而持久层中的model则是对应着数据库的每一张表。表示层的model相当于是有持久层的model多表查询后的结果;理解为数据库中表和视图的关系。
2022年7月14日 更新
Entity 层 = Model层(非MVC中的M),就是实体类,一般一个类表示一个数据表,类中的属性表示一个字段。
DAO 层 = Mapper 层,直接跟数据库打交道,对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的。
Service 层,存放业务处理逻辑。
在实际开发中的 Service 层可能被处理为实体 Service 层,而不是接口,业务逻辑直接写在 Service(Class,不是 Interface)层中,Controller 直接调用 Service,Service 调用 Mapper。
当然了,Service之间也是可以互相调用!

本文转载自:
三层构架和 MVC 不同吗?
深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用
评论已关闭