PHP框架每张表对应一个model的意义何在
很多框架中,每张表对应一个model,我们一般会在MVC中增加service层用来处理业务逻辑,为什么不在service层直接操作db类
框架这么做(每张表对应一个model)的优势在哪里
谢谢诸位
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
很多框架中,每张表对应一个model,我们一般会在MVC中增加service层用来处理业务逻辑,为什么不在service层直接操作db类
框架这么做(每张表对应一个model)的优势在哪里
谢谢诸位
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
就是简单明了。尽量不直接操作表,而是封装方法,这样比较可控
目前说三个热门框架吧,国外的 Laravel 和 Symfony 以及或内的 ThinkPHP 5 三个,这三个中都没有所谓的 Service 层的,service 都是开发者自己写的。而 这三个框架中 Model 最主要的意义是为了定义数据关系,换句话说,就是为了定义表和表之间的关联关系。例如 Laravel 中,一个用户是 User 模型,对应
users
表,还有一个 Post 模型,对应posts
表,在posts
表中有一个user_id
字段对应的users.id
字段。所以可以在 User 模型中第一一个方法:这样例如我们拿到了一个用户模型在
$user
中。我们想读取这个用户的 posts 传统的需要进行查询。而在 Model 中,我们只需要调用$user->posts
就拿到了,本质上也是查询过程。只是这种模式中,把数据间的关系从代码上更加显得有关联性了。
总结各大框架,只有一句话,模型层和每张表都需要对应一个相对应的模型,最核心的目的就是为了简化表操作 然后没有然后了
在衍生一下这句话 也就是说,如果你已经习惯了使用框架,那么模型层的这种做法只是需要配置的几下的问题,省却了很多后顾之忧,所谓的意义也就是这些,用简单的方式和少量的时间去实现复杂的内容。
可以这么说,很多框架都明确规定了,需要一张表对应一个模型的提倡,其实最终的目的也就是优势,也是需要你了解的所在。
如果你真的有所了解,那框架是真的可以让你省力气的,不管在模型中如何抛出异常,如何使用钩子或者行为 或者事件,再或者中间件,我们都可以从容的实现代码的逻辑,当然有个前提就是你必须会那些我说的原理和逻辑,不然白搭。
我虽然也处于框架学习阶段,但是我却是知道,这些方式写代码,我再也不用在控制器里面考虑过于复杂的接口逻辑了,
中间件解决了我的基础验证问题,验证器解决了我的各种类型验证问题,行为钩子解决了我的存储问题,通用事件同样解决了用户整体架构的事件问题。
最后模型事件让我在模型层操作在也不用写一大堆的东西 只需要专注的进行本来想要操作的主表,其他的东西 均在插入前插入后 添加前添加后之类的地方任意做处理,说真的这其实是一件比较幸福的事情,应为再也不用操劳过度的写这个写那个了。
代码质量也出奇的高了许多,而且不管是对接口开发 还是对混合模式开发 我都变得可以游刃有余的控制我的功能和实现方式 并且相应的不管怎么搭建,我们只需要处理的地方也变得越来越少了,然而实现的代码能力却越来越强,一切都为后台提供了超强的便利条件,那么模型层对印表 是不是就很牛逼了呢。我认为是的,至少在我没有接触到更牛逼的东西之前,这个暂时还未被超越。
就拿
Laravel
举例来说像:等。个人建议
Model
就是用来维系这些的。而
查询构建器
这些则应当放到Repository
,像类似于用户登录
这种属于业务逻辑的 就应该放到Service
为每个层级划定责任内容,更利于单一职责。
Model
以Laravel 为例,Laravel 的 Model 叫 Eloquent ORM
以下是百度百科对ORM的解释
在实际应用中,数据库中每一个表对应一个类,而类的实例对应数据库表中的一行记录,数据库中的列对应实例的属性。
同时Model还可以定义与其它Model的关联关系,即数据库表之间的关联关系。
laravel model 实现了软删除,查询作用域,事件,访问器,修改器等功能
为什么不在service层直接操作db类。
如果只是从对数据库的操作结果来看,通过db或model,结果都是一样的,没有区别。
但是Model会更便利,其次它统一了表操作入口,再就是更面向对象
具体有哪些好处或便利,建议楼主去看框架Model的源码
关于Service层
laravel 中 Service层 链接描述
ThinkPHP中的Service层 链接描述