mar*_*c_s 11 asp.net-mvc separation-of-concerns
我一直对我认为矛盾的方面感到困惑:ASP.NET MVC声称要进一步支持"关注分离"的座右铭,我发现这是一个好主意.
但是,似乎没有办法将控制器,模型或视图分离到它们自己的组件中,或者将区域分成组件.
与固定Controller,Model并View夹在你的ASP.NET MVC,你实际上创建的事情了巨大的杂牌波奇.是关注的分离,真的吗?似乎与我完全相反.
所以我想知道:
如何创建一个ASP.NET MVC解决方案,将控制器,模型和充满视图的文件夹分离到单独的程序集中?
如何将ASP.NET MVC 2的区域放入单独的程序集中?
或者你如何管理一个大的ASP.NET MVC应用程序 - 它有几十个甚至一百多个控制器,很多模型和视图模型类,以及几百个视图?
控制器: AFAIK你不应该做任何特别的事情来将控制器扔进他们自己的组件中.您最需要做的就是覆盖ControllerFactory的GetControllerType方法.
型号:对您放置模型的位置零限制.虽然这是不赞成的,但我经常使用来自Nhibernate /其他ORM层或WCF /服务层DTO的持久对象,这些对象位于单独的程序集中作为我的视图.这与使用WebForms的方式相同.
视图:必须将单独程序集中的视图标记为嵌入式资源,然后必须使用知道如何从资源而不是文件系统获取视图的自定义VirtualPathProvider. 来自资源而不是文件系统的视图.这也是您用于WebForm开发的完全相同的技术.
关于mcintyre321和他的Portable Areas回答: 链接的项目几乎不做任何自定义,只是简单地将现有的MVC 2扩展点包装成一个更易于使用的抽象.它几乎没有"定制"和更多的语法糖.
您管理一个大型MVC应用程序就像您管理任何其他大型应用程序一样.我害怕开放一个500页的WebForms项目,因为你从来都不知道每个代码背后的内容.使用MVC,不同的功能主要在其正确的位置.它完全不相反.
将代码分离到单独的程序集中与关注点分离是正交的.代码存在的地方不是"关注".关注点的分离与各种组件的依赖关系的责任和方向有关.例如,视图负责渲染输出,控制器知道视图,但视图并不真正了解控制器.
Likewile,Models对视图或控制器一无所知,但视图和控制器都知道模型.
但是,回到你的问题.正如jfar指出的那样,将控制器和模型移动到另一个组件中非常简单并且可以工作.将视图移动到另一个程序集更加棘手.使用自定义虚拟路径提供程序的嵌入式资源是一种方式,但我们通常不建议将其用于高性能网站.但如果它符合您的需求,那就去吧.
| 归档时间: |
|
| 查看次数: |
5110 次 |
| 最近记录: |