我目前正在一个半大型的MVC 2项目上工作,我们拥有的带有相关视图和视图模型的控制器数量正在变得相当大。为了尝试提供一些分离,我一直在研究如何使用MVC 2的区域特性,并相应地重构项目。
我面临的问题之一是,我们对控制器具有继承等级,以便共享在具体控制器中使用的功能和属性,然后公开我们希望处理的必要操作。
实际上,我们目前在主控制器文件夹中有一个类似这样的设置:
Controller (MVC)
+-- BaseController (Abstract)
+-- BaseWorkController (Abstract)
+-- BaseWorkAController (Abstract)
+-- ... a number of controllers exposing actions
+-- BaseWorkBControllers (Abstract)
+-- ... a number of controllers exposing actions我正在考虑为每个工作控制器创建区域。
每个区域都有其相关的视图和视图模型,甚至模型。
然而,我似乎面临的问题是如何放置BaseWorkController。是否可以将其保留在主控制器文件夹中,而区域控制器只包含对该控制器的引用。此外,不同区域的代码可能需要访问不同的模型,甚至需要为某些功能创建一些属性。
这个设置是否看起来是一个可以接受的使用区域。从我所读到的内容来看,区域似乎有助于分离关注点和功能,这正是我所要寻找的。但是,如果这是对功能的完全错误的使用,我不想对此进行投资?
控制器代码使用其他区域或主核心控制器/模型/视图文件夹的功能是否可以接受。
发布于 2011-06-19 04:37:49
应用程序中的继承量对我是一个警告。如果您有如此多的共享行为,我认为您应该考虑将其从控制器本身中提取出来,创建一些封装共享逻辑的类,然后您可以通过组合而不是继承来扩展控制器的功能。
要回答您的问题,从基本控制器到其他领域的控制器共享逻辑不存在任何问题。如果这样做有意义的话。但是,如果您开始在继承链中得到几个层,我将强烈考虑检查代码,并查看共享逻辑在不同的共享类中是否有意义,而不是使用多个重写使事情复杂化。
如果您在不同级别上重写行为,您可能需要查看策略模式。您可以使用该模式来交换组件的行为并使用组合,而不是继承。
https://stackoverflow.com/questions/6400449
复制相似问题