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

时间:2009-05-11 13:10:27

标签: c# asp.net-mvc

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

有没有办法将相关的控制器,视图,模型组合在一起,就像我有画廊模块我希望它的所有控制器,视图,模型在图库文件夹下分组。

4 个答案:

答案 0 :(得分:3)

Areas听起来像你在找什么。这将允许您对控制器/视图/等进行分组。除非我误解了这个问题?

答案 1 :(得分:2)

菲尔·哈克discussed this here,这是我面临的同样问题,尚未正确克服。

答案 2 :(得分:1)

从它的声音来看,你正在反对MVC的基本原理,即模型,视图和控制器的分离,而不是你希望通过使用模块将其分成90度。

我不完全确定将它分成模块会有什么好处,因为我希望你有一个GalleryController。您可能需要分组的“实体”最多的是视图,可能是每个GalleryController操作的一个或多个视图,但它们位于自己的文件夹中,无论如何都会提供您正在寻找的功能。

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

所以...实际上它是可能会有点混乱的视图,但它们已经基于它们的控制器分成了文件夹。话虽如此,如果能更好地满足您的需求,您可以将它们移动一下。对于其余部分,没有必要,因为如果你想使用“正确的”MVC(即模块化模型)或者不需要(即只有一个控制器),你就不应该这样做。如果您的控制器太大,只需为要拆分的任何功能创建一个单独的模块。我认为这是模块化的,你应该得到它。

答案 3 :(得分:1)

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

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

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

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

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

相关问题