关于model的安排,最好要怎么设计? [ 2.0 版本 ]
我建了一个
UserModel.php //用于存储各个表单的公共字段和规则等
LoginForm extends UserModel //用于处理登录的逻辑和一些login独立有的字段
SignupForm extends UserModel //用于处理注册逻辑和一些Singup才有的字段,比如确认密码 surepass
UpdateForm extends UserModel //用户处理更新逻辑和更新才有的字段
//Usermodel 中有个成员变量保存这User extends ActiveRecord的引用用于真正的curd
现在的问题就是:
1 为什么要分离出规则和逻辑从UserModel呢?因为我考虑到 doc中 说不要在一个模型中过多的使用 场景scenario
(其实过多使用场景是会降低效率的 且 老是要手动指定scenario ),所以我采取这种做法,
但是明显觉得这样有点烦(虽然我将他们放在一个目录下了)或者有没有必要,或者有没有更好的做法。
2 不知道为什么?我就是不想要直接 一个Model extends ActiveRecord
,所以在上面中
我定义了 UserModel extends Model
和 User extends ActiveRecord
大家觉得这里有没有必要直接 继承ActiveRcord
共 1 个回答
-
ActiveRecord-》BaseActiveRecord-》Model
这是一个继承关系,就是说ActiveRecord是Model的子级,model层的两种区别就不赘述了。UserModel.php //用于存储各个表单的公共字段和规则等 LoginForm extends UserModel //用于处理登录的逻辑和一些login独立有的字段 SignupForm extends UserModel //用于处理注册逻辑和一些Singup才有的字段,比如确认密码 surepass UpdateForm extends UserModel //用户处理更新逻辑和更新才有的字段 //Usermodel 中有个成员变量保存这User extends ActiveRecord的引用用于真正的curd
这样做呢确实有他的好处,比如可以自己定义一些规则啊,都是专项的,考虑下扩展挺好的。
对于场景机制,还是不错的,既然说效率低了些,那就慎用。个人从项目的扩展来看,分开的好。比如UpdateForm,这个可以将全站所有关于update相关的东东都可以写在一起了。
管理起来会方便很多。
要看就看整体的规划,这个有待衡量。
程序越复杂,各个类的关系就会很复杂,是能分开就分开。算是一条开发原则了。
若有不妥之处,还望指出!共 1 条回复模型直接继承
ActiveRecord
的弊端就是在视图层中,开发者可以直接和数据库交互,从这点出发,可以考虑不继承ActiveRecord
———————无耻的分割线———————————————————————————————————————————————————————————————
后面我在写的时候还是使用了UserModel继承ActiveRecord的方式,当然各个表单还是像上面分开,
为什么我后来还是让UserModel继承了ActiveRecord,因为我发现,我的数据验证规则是分散在一个一个的FormModel
中的,所以当return static::find()->where(['id'=>$id])->one()->validate()做更新的时候没有利用到数据规则,所以继承了,
在controler中的代码就变成了 UpdateForm::findOnePost($id);了,暂时没有想到好的解决方法,不知道是不是旁落了
scenario ,在项目中我还是没用到这个scenario 啊!(感觉要发生问题了),据我所知在,在事务中的使用好像也用到了
scenario 这个,不知您有什么建议或实践,
非常感谢您的回答,在我独自学习yii2的过程中。
jackz
最后登录:2018-08-02
在线时长:10小时6分
- 粉丝6
- 金钱255
- 威望30
- 积分655