繁体   English   中英

在MVC中对视图,控制器,模型进行分组

[英]Grouping Views, Controllers, Models in MVC

也许我错了,但我真的很不喜欢MVC应用程序的当前结构,而且我认为在大型项目中,这将给维护带来麻烦。

所以有一种方法可以将相关的Controllers,Views,Models组合在一起,就像我有Gallery Module一样,我希望将其所有Controllers,Views,Models归类到Gallery Folder下。

区域听起来像您想要的。 这将使您对控制器/视图/等进行分组。 除非我误解了这个问题?

Phil Haack 在这里讨论了这个问题 ,这是我已经遇到并且尚未正确克服的同样问题。

从它的声音来看,您正在违背MVC的基本原理,那就是将Model,View和Controller分离,而不是希望通过使用模块以90度拆分。

我不确定要以任何方式将其拆分为模块会带来什么好处,因为我希望您拥有一个GalleryController。 您可能需要对“实体”进行分组最多的地方是视图,每个GalleryController动作可能包含一个或多个视图,但是它们位于自己的文件夹中,无论如何它们提供了您正在寻找的功能。

最后是模型。 显然,我不知道您的项目,所以不知道它的布局,但是通常不存在使用一个控制器(或您的模块)使用的模型。 例如-我有用于用户,公司,车辆等的模型。这些模型是我的数据结构的共享表示,与模块无关,因为用户可以在网页上看到它。 我不能将它们分成模块,因为重点是它们被整个应用程序共享。

所以...实际上,视图可能会有些混乱,但是它们已经根据其Controller拆分为多个文件夹。 话虽如此,如果更适合您的需求,您可以稍微调整一下它们。 对于其余的部分,则没有必要,要么是因为您不想使用“适当的” MVC(即模块化模型),要么是没有必要(即仅一个Controller)。 而且,如果您的控制器太大,则可以为要拆分的所有功能创建一个单独的模块。 我认为这与您需要获得的模块一样。

我找到了一个相对简单的解决方案,该解决方案使用IIS配置来模拟区域。 不需要扩展现有的MVC框架。

在您的解决方案下,为站点中所需的每个区域(例如Root,Blog,Forum,App1,App2)创建一个新的MVC项目。 如果需要任何通用的支持代码或通用的模型,请将其放在MVC项目所依赖的单独的dll项目中。

在IIS中,将站点根目录配置为指向根项目目录。 在站点根目录下创建指向每个子区域项目目录的Web应用程序。

在为每个子区域配置路线图时,请勿在路线中包括应用程序的名称。 IIS似乎为您解决了这一问题。 (例如,“ ShowPost / {postname}”,而不是“ / Blog / ShowPost / {postname}””)

好处是您可以更改与路由系统无关的Web应用程序的名称,并且每个应用程序都认为它与整个服务器一起运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM