• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Yii2的model中应该包含哪些代码?

php 搞代码 4年前 (2022-01-25) 10次浏览 已收录 0个评论
文章目录[隐藏]

model中除了包含数据验证及基本的删除外,还能写哪些代码?如果要进行多行添加、删除、更新,数据预处理需要根据多种条件进行判断,同时要进行多个表的操作(并不存在一对多、多对一这样的关系),这里有很大一部分代码,写到controller中感觉很大,写在model感觉有时还不行,这些难道都写在helper里面,还是有其他好的地方来组织?

回复内容:

model中除了包含数据验证及基本的删除外,还能写哪些代码?如果要进行多行添加、删除、更新,数据预处理需要根据多种条件进行判断,同时要进行多个表的操作(并不存在一对多、多对一这样的关系),这里有很大一部分代码,写到controller中感觉很大,写在model感觉有时还不行,这些难道都写在helper里面,还是有其他好的地方来组织?

凭感觉和经验吧,我的回答纯粹是抛砖。
Yii2里面没有什么特别的m/本文来源gaodai#ma#com搞*!代#%^码网%搞代gaodaima码odel概念,包含文档和示例里面都很少提到这个东西,我感觉他们就是希望一切都用ActiveRecord对象(甚至form都是继承于此)就够用了,但是实际上这是很糟糕的事情,因为当多表联动的时候对象边界就会变得很模糊。然而实际上我在某个项目中自定义了model层后对方竟然还用这种写法不是Yii2推荐的为由拒付了项目尾款,所以我更是对此吐槽不已。
在我看来,ActiveRecord对象是对数据表的映射,它应该只处理内部的事情,这无疑就清晰了很多。它就是数据表的实体映射,不是model。
但是,很多时候多个表之间必然是联动的,如创建订单的时候必然要同时操作订单详情,那么这种逻辑控制应该是在model中完成。
此外,如果Controller和ActiveRecord分别由不同的开发者完成时,model层也很重要,可以用于双方的耦合,因为允许在Controller中直接调用ActiveRecord实际上是挺危险的。

至于你觉得Model不够用,还可以选择 Service, Plugin, Filter等,而不只仅限于Helper。

补充:貌似还一直没扣题呢,哈哈
我认为Model是在数据表基础上更为复杂的一种数据模型,往往表示了开发者对对象的理解与定义,例如我们有订单表和订单详情表,但是这不是对象级别的数据,而OrderModel则是对订单对象的声明,一个订单不但有订单信息,同时包含订单详情,甚至可能关联物流、发票等。
我在Model中通常会包含
常量定义,如果需要设置一些特定标示的话
事物处理,如果需要多个ActiveRecord联动的话
简单CRUD,如果需要隔离ActiveRecord的话,即约定Controller不去直接调用此类型的对象,而是必须通过model中封装的方法
其它,我觉得Helper主要是给前端用的,所以一个方法常用但是前端不用,那么可以放在model里面;此外,有的方法可能不好确认其归属,即Amodel需要,Bmodel也需要,也简单,两处都声明,只不过一个是具体逻辑,另一个仅仅引用而已。

你可以使用行为(Behaviors).
把模棱两可的共用代码 放在行为里。
类似于Traits。

或者组件。Components

对象的数据属性和行为。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Yii2的model中应该包含哪些代码?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址