搜索

首页  >  问答  >  正文

做网站的MVC模式到底如何分配model。

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

现在的想法是把挑出用的多的函数放到Model里面,把零碎的在留在Controller里面。
求各位给点意见撒~

巴扎黑巴扎黑2738 天前559

全部回复(7)我来回复

  • 習慣沉默

    習慣沉默2017-05-16 17:08:54

    瘦C,胖M,C最好不要超过15行

    回复
    0
  • 迷茫

    迷茫2017-05-16 17:08:54

    其实你说的这个问题很多框架都可以解决,也就是active record功能,也就是根据代码动态生成query语句,它最开始在rails框架里得到推广,并逐步在其他语言里得到实现。比如

    $userModel->find_one_by_id(123);

    实际上如果你的框架支持active record,像这种简单的根据主键查询,我们是不需要在model里写一行代码的,model基类根据你所调用的方法名,组装成合适query语句,并将查询结果返回给你。

    我不知道你使用的是何种语言,但目前基本所有的脚本语言都有active record的实现,你可以在自己的项目中实现这一功能,这样也给后续的开发带来好处。

    能在代码中约束的问题,比用一些设计原则约定更加有效,因为你不能保证每个开发者的水平都一致。

    回复
    0
  • 世界只因有你

    世界只因有你2017-05-16 17:08:54

    可以参考下fowler的模式书, 事物脚本,表模块,领域模型三种风格.

    回复
    0
  • 迷茫

    迷茫2017-05-16 17:08:54

    我不知道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类,所以看上去这个类会干净许多

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-16 17:08:54

    把你的应用逻辑放在model里面

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-16 17:08:54

    做好分层吧,controller负责页面级别的控制逻辑

    回复
    0
  • 迷茫

    迷茫2017-05-16 17:08:54

    。。。。。。。。。

    回复
    0
  • 取消回复