php架构学习-传统三层架构,三层架构和MVC - osc_73m98sy1的个人空间 - OSCHINA - 中文开源技术交流社区...

深入理解MVC,三层架构,ORM

首先MVC要和三层架构区分开,三层架构是指表现层,业务逻辑层,数据访问层, 而MVC只是一个UI层,即处于三层架构中的表现层。

DAL是三层架构(表现层,业务逻辑层,数据访问层)中的数据访问层,是一个概念或者说是一个方案,它由许多DAO组成,或者说由DAO具体实现,是把和数据库相关的代码封装起来,这样当我们执行分库时,便只用调整DAO的代码了,模型根本不用关心它使用的数据是放在A库还是B库。

BBL 业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

ORM 也是一种对数据库访问的封装,然而ORM不像DAO只是一种软件设计的指导原则,强调 的是系统应该层次分明,更像是一种工具(面向对象的开发方法是当今企业级应用开发环境中国的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM系统以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。)),有着成熟的产品,比如JAVA届非常有名的Hibernate,以及很多PHP框架里自带的ORM库,ORM库。他们的好处在于能将程序中的数据对象自动地转化为关系型数据库中对应 的表和列。数据对象间的引用也可以通过这个工具转化为表之间的join。使用ORM的好处就是使得你的开发几乎不用接触到SQL。创建一张表,声明一个对应的类,然后你就只用个这个类的实例进行交互了, 至于这个对象里的数据该怎么存储又该怎么获取,通通不用关心。

ORM是一种工具,可以把实体类数据转化到数据库,数据库数据转化成实体类,model其实就是实体类,AR就集合了这两个的特性,它是把负责持久化的代码也集成到数据库对象中,即这个数据对象知道怎么样把自己存到数。这和以往的ORM有不同,传统的ORM会把数据对象和负责持久化的代码分开,数据对象只是一个单纯包含数据的结构体,在模型层和ORM层中传递。而在active record中,模型层集成了ORM的功能,他们即代表实体,包含业务逻辑,又是数据对象,并负责把自己存储到数据库中。

MVC和三层架构的触发点是相同的-----分层,解耦。它们都做了显示与数据的分离,大大降低了系统的耦合性。

但是从专业角度来说MVC和三层架构没有任何关系,三层是三层,MVC是MVC。唯一能把它们联系在一起的就是“三层”这个字了,不过从初学者的角度把二者放在一起区分起来学习也更容易理解。

MVC三层架构模式,细化为mdscv五层架构模型,更清晰规范易维护

Model: 定义表名,白名单,黑名单,时间戳,表之间的关联关系等。Model中的方法会被Dao引用。 Model和数据表一一对应。

简单一句话,Model层的职责就是定义数据模型。

Dao: 响应Service层的需求,引用Model或DB,做数据库增删改查,返回原生查询结果给Service。 简单一句话,Dao层的职责就是数据库增删改查(CURD)。

Service: 响应Controller层的需求,通过Dao->Model获取数据库数据,实现业务逻辑,返回结果给Controller层。

Service层应始终有一个与Controller方法同名的方法,作为Controller方法的入口(简称入口方法),此入口方法将作为该业务逻辑的主方法。 在入口方法中,可以调用本Service层的子方法,或者其他兄弟Service层的子方法,或者框架原生的配置引用方法、缓存操作方法等。入口方法中不应该有大量的业务逻辑判断。尽可能拆分到子方法中去实现业务逻辑。 在子方法中,根据入口方法的参数,做单一的数据数据库“增 or 删 or 改 or 查“,然后返回结果给入口方法。必要时,子方法可以引用框架原生的配置引用方法、缓存操作方法等。严格保证每个子方法只做一项单一的业务。 简单一句话,Service层的职责就是实现业务逻辑。

Controller: 响应路由请求,验证来自用户的数据,把被提交的数据转发给Service层的入口方法,根据Service层的返回值,调用View层的文件进行前端展示。 有时候,Controller方法接路由请求,直接调用View层的文件,不需要Service参与。 路由和Controller方法一一对应。 简单一句话,Controller层的职责就是转发(Forward)。

View: 用来被Controller层方法调用,接受来自Controller层的数据,并在前端展示给用户。 简单一句话,View层的职责就是展示(Display)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值