猿问

现在的想法是把挑出用的多的函数放到Model里面,把零碎的在留在Controller里面?

MVC模式中controller是一个管道,Model是处理器。但是很多时候Controller会需要到不同表的不同内容。这样如果在Model中就会有很多像get_name,get_info,get_id之类的只要一条Query就能完成的功能。感觉很累赘。其实在Controller要用的地方写条Query也就好了,但是这样又破坏了MVC的规则。


德玛西亚99
浏览 167回答 2
2回答

至尊宝的传说

其实你说的这个问题很多框架都可以解决,也就是active record功能,也就是根据代码动态生成query语句,它最开始在rails框架里得到推广,并逐步在其他语言里得到实现。比如$userModel->find_one_by_id(123);实际上如果你的框架支持active record,像这种简单的根据主键查询,我们是不需要在model里写一行代码的,model基类根据你所调用的方法名,组装成合适query语句,并将查询结果返回给你。我不知道你使用的是何种语言,但目前基本所有的脚本语言都有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类,所以看上去这个类会干净许多
随时随地看视频慕课网APP
我要回答