84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
MVC模式中controller是一个管道,Model是处理器。但是很多时候Controller会需要到不同表的不同内容。这样如果在Model中就会有很多像get_name,get_info,get_id之类的只要一条Query就能完成的功能。感觉很累赘。其实在Controller要用的地方写条Query也就好了,但是这样又破坏了MVC的规则。
现在的想法是把挑出用的多的函数放到Model里面,把零碎的在留在Controller里面。 求各位给点意见撒~
瘦C,胖M,C最好不要超过15行
其实你说的这个问题很多框架都可以解决,也就是active record功能,也就是根据代码动态生成query语句,它最开始在rails框架里得到推广,并逐步在其他语言里得到实现。比如
$userModel->find_one_by_id(123);
实际上如果你的框架支持active record,像这种简单的根据主键查询,我们是不需要在model里写一行代码的,model基类根据你所调用的方法名,组装成合适query语句,并将查询结果返回给你。
我不知道你使用的是何种语言,但目前基本所有的脚本语言都有active record的实现,你可以在自己的项目中实现这一功能,这样也给后续的开发带来好处。
能在代码中约束的问题,比用一些设计原则约定更加有效,因为你不能保证每个开发者的水平都一致。
可以参考下fowler的模式书, 事物脚本,表模块,领域模型三种风格.
我不知道ci是如何实现active record的,不过你说的小函数,在许多php的active record实现里面都是使用的魔术方法,或者代码生成器自动帮你生成的,都不用你自己写。
举一个例子,active record在doctrine里面是这样实现的:假如一个表foo,带字段bar1, bar2, bar3,doctrine会根据table schema直接生成四个文件: FooTable.class.php,FooTableBase.class.php,Foo.class.php,FooBase.class.php。在两个base文件里面,会有自动生成的一系列getter和setter比如getBar1(),setBar1($param)这些方法。base文件是不允许程序员自己修改,它会随着schema的改变而变化。而非base类直接继承了base类,所以看上去这个类会干净许多
把你的应用逻辑放在model里面
做好分层吧,controller负责页面级别的控制逻辑
。。。。。。。。。
瘦C,胖M,C最好不要超过15行
其实你说的这个问题很多框架都可以解决,也就是active record功能,也就是根据代码动态生成query语句,它最开始在rails框架里得到推广,并逐步在其他语言里得到实现。比如
实际上如果你的框架支持active record,像这种简单的根据主键查询,我们是不需要在model里写一行代码的,model基类根据你所调用的方法名,组装成合适query语句,并将查询结果返回给你。
我不知道你使用的是何种语言,但目前基本所有的脚本语言都有active record的实现,你可以在自己的项目中实现这一功能,这样也给后续的开发带来好处。
能在代码中约束的问题,比用一些设计原则约定更加有效,因为你不能保证每个开发者的水平都一致。
可以参考下fowler的模式书, 事物脚本,表模块,领域模型三种风格.
我不知道ci是如何实现active record的,不过你说的小函数,在许多php的active record实现里面都是使用的魔术方法,或者代码生成器自动帮你生成的,都不用你自己写。
举一个例子,active record在doctrine里面是这样实现的:假如一个表foo,带字段bar1, bar2, bar3,doctrine会根据table schema直接生成四个文件: FooTable.class.php,FooTableBase.class.php,Foo.class.php,FooBase.class.php。在两个base文件里面,会有自动生成的一系列getter和setter比如getBar1(),setBar1($param)这些方法。base文件是不允许程序员自己修改,它会随着schema的改变而变化。而非base类直接继承了base类,所以看上去这个类会干净许多
把你的应用逻辑放在model里面
做好分层吧,controller负责页面级别的控制逻辑
。。。。。。。。。