thinkphp中,模型分层的意义是什么?每个层中各自负责的范畴是什么?
不清楚这种分层的意义是什么。
百度了一圈似乎没有找到这方面的文章,还请大家赐教
以下内容摘自tp5手册
ThinkPHP支持模型的分层 ,除了Model层之外,我们可以项目的需要设计和创建其他的模型层。
通常情况下,不同的分层模型仍然是继承系统的thinkModel类或其子类,所以,其基本操作和Model类的操作是一致的。
例如在index模块的设计中需要区分数据层、逻辑层、服务层等不同的模型层,我们可以在模块目录下面创建model、logic和service目录,把对用户表的所有模型操作分成三层
数据层:app\index\model\User 用于定义数据相关的自动验证和自动完成和数据存取接口
逻辑层:app\index\logic\User 用于定义用户相关的业务逻辑
服务层:app\index\service\User 用于定义用户相关的服务接口等
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
看到你修改了问题,并对问题做了详细描述,那么,我来好好的回答这个问题,其实整套分层的意义很简单,不外乎围绕的是根本原因:
程序 = 数据结构 + 算法
所有的层的拆分都是围绕着数据结构和算法来整理的,分层的根本意义也是为了让逻辑更加清晰易懂,首先,来看看你摘自TP官网的定义:
其实他官方的解释已经挺清楚了,但是如果你没有接触复杂的业务可能不太理解这三层的定义,我逐个就我遇到的一些业务问题来做详细的讲解:
数据层
逻辑层
服务层
从以上三个方面来看,数据层可以说是程序的
数据
,而逻辑层是程序的算法
;当然这个角度又是从宏观角度来看待的。而服务层又能把各个逻辑关联起来,起到很好的整体性,能提供给应用上层调用,减少代码的冗余,可以更好的复用。另外我看到有人回答说用java来写,我觉得这就是语言论了,程序的根本就是思想,老是想着语言相关性,不知道意义何在,我更趋向于语言无关性,借鉴不同的语言特性思想,来表现不同的业务逻辑。
很多人一般控制器调用模型,然后没了。如果分层的话,就是控制器调用服务或者逻辑,服务或者逻辑调用模型。
数据层就是model模型,一般只做数据表的定义,自动验证,基本不写方法的,方法主要写到逻辑和服务层,通过D方法来操作表。
逻辑层和服务层:有关数据库的增删改查、数据的处理。
我是这么理解的,业务复杂且涉及调用多个子方法或者操作多张表的就写到逻辑里面,其余像简单的数据处理、组装、封装、单表操作,这些写到服务层。
分层的意义:
1.解耦
2.职责分明
3.提高代码复用率
4.利于维护
5.提高代码的健壮性
给个层的职责:
控制器(controller): 只 负责调度 service以及view,提供对外路由访问
模型(model): 只负责对数据表执行CURD操作,不做任何业务处理
服务层(service): 只调用model,只做业务处理。
逻辑层其实完全可以省略了,以上的3个就足以。
服务、逻辑分层,本质是为了解决控制器或者模型代码臃肿肥大而出现的(把调用接口跟数据处理都写在一起),但是我们可以使用trait跟基类来减少重复代码,提高复用,而不需要服务、逻辑分层,MVC嘛,越简单粗暴越好
可以研究下zend框架或者看下某些大神用php写的二次开发项目怎么写的