在考虑一个问题,MVC为什么一定要model一个目录,View一个目录……


在考虑一个问题,
MVC为什么一定要Model一个目录,View一个目录,Controller一个目录,
而不是按照模块,放在一个目录里:
比如订单模块:
Order/
OrderController.php
OrderModel.php
OrderList.phtml
OrderEdit.phtml

我觉得这样子 在开发订单模块的时候,
就不需要 一会儿到view目录找order文件夹,再找edit模板。
一会儿 又到model目录找orderModel
……

而且 移动到别的项目的时候 也更方便呀。整个文件夹复制就好了


补充几点真正的好处:
一,比如你新开发了订单模块 要传到服务器,你只需要把Order目录传上去,而不需要 到Controller目录把OrderController.php传上去,再到Model目录……
二,比如你卖软件,文章模块1000块,订单模块3000块……客户要什么模块,只需要把对应的模块目录发给他就好,而不需要传个四分五裂的目录。
三,这个结构 才符合正常人的思维,比如composer,比如npm,都是各个模块有各自的目录,

就好像你要整理你的美女图库,你一定是把 林志玲的放一目录,苍老师的放一个目录,
哪天我找你要苍老师的图片,你把苍老师的目录打包给我就好了。
而现有的大多数PHP框架的作法是把.jpg的 不管林志玲还是苍老师都放一个目录,
然后gif的放一个目录……
这个子的结构 有什么好处?


再拿前端做参考,
项目小的话,或者是古老的做法,就是css一个目录,js一个目录,img一个目录,
但是大一点的项目,还有先进一点的前端工程师,一定是按模块来分的,而不是按照文件类型。

laravel yii 框架 thinkphp php

H是不对滴 10 years, 2 months ago

MVC为什么一定要Model一个目录,View一个目录,Controller一个目录
这句话就不成立,谁规定了 mvc 就得这样组织代码结构。

另外,题主提到的模块方式,就和 python web 框架 django 项目代码组织很像,同时 flask 的蓝图( blue_print )方式组织代码也值得学习。

JK202 answered 10 years, 2 months ago

View和Model的调用不会完全是一一对应的,当一个View调用多个Model的时候,你就不知道这个View应该写到那个目录了

挥泪卖队友 answered 10 years, 2 months ago

比如order和admin有view是一样的。

你有本事开门呀 answered 10 years, 2 months ago

嗯,你说的有些道理,你这样把每个项目都拆分成了一个小的app,每个app都自己的controller model view,这样做是有好处,扩展性极强,但是不是大型的项目就不能体现这种好处,商派的B2C商城ecstore就是楼主说的这样做的,分为很多了app,楼主的思路是对的

燃烧的熊吉 answered 10 years, 2 months ago

那么问题来了,公用的Model、View片段等等怎么办? 单个文件夹拷到另一个项目里直接就work现实吗?单纯为了“找代码”,在代码结构上大动干戈我觉得并不经济。View Model Controller之间能通过IDE的追踪功能可以方便地跳转,或者统一命名,通过名字快速搜索才是解决“找文件麻烦”的好方法

当然如果业务本身庞大到需要类似拆分的时候,这样的拆分也并非完全不合理,但一定要划清边界,理清拆分的规则,理清共同模块的放置方式和维护方式等等

潜水捉河蟹 answered 10 years, 2 months ago

Your Answer