是否有人建议以可插拔模块化方式构建ASP.Net MVC应用程序?我的意思是一些博客文章/教程等。我刚刚阅读Hammet's MEF and ASP.NET MVC sample blogpost,但我发现MEF还不够成熟,无法在生产中使用它。我无法在这个主题上谷歌任何其他相关帖子......
我知道我可以实现模块化实现自定义ControllerProvider和一些插件检查机制,但我想在开始重新实现轮子之前研究一些更多的方法/最佳实践:)
本主题的模块性应该只涵盖Web应用程序的观点 - 没有其他像模块化应用程序模型/服务等。我想找到最好的方法将一个Web应用程序分成多个程序集,其中包含额外的控制器,视图,资源,JS + CSS文件,图像等所以应该有一些主要的Web应用程序项目,它将寻找可用的可插入Web应用程序组件,加载它们,发布它们的控制器,使它们的视图和其他资源可用和可能为每个Web应用程序模块准备一些带有条目的菜单。
我不想在这里讨论任何模型+服务可插拔架构 - 只是ASP.Net M VC 部分。
答案 0 :(得分:3)
模块化是一个相当广泛的概念,我认为你的问题的答案必须是主观的。您所询问的是一个架构决策,没有一个好方法可以解决它。根据项目的不同,您可能会有不同的优先级和系统不同部分的重要性。我认为MVC模式提供了足够的关注点分离,这实际上是每个模块化架构的目的。
如果您希望能够在现有应用程序中轻松插入新模块,那么如何定义模块?我认为你应该稍微缩小这个问题,以获得一些非模糊和有意义的答案。
答案 1 :(得分:1)
MVC完全支持部分请求渲染第三部分控制器,请看这篇文章:http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/
显然,MVC中的模块至少包含一个Controller和一个或多个视图。但也许你想要的只是少数,因此重写控制器要比传统的WebForms架构容易得多。
或者您可能想要替换数据源,只需覆盖模型实体中的方法,然后就可以启动并运行了。它是MVC的全部核心原则,你可以分离不同的逻辑层,而且你要强制执行它,不像WebForms,如果你链接它仍然允许你直接在你的视图中做SQL。
(MVC也支持它不是设计,而是通过继承。)
答案 2 :(得分:1)
作为一个起点,您可以从本文中获取一些想法:
Spark View Engine - Modularity
示例代码:
spark / src / Samples / Modules
代码位于Spark View Engine树中(这是一个非常好用且功能强大的项目),但与它没有多大关系。它使用Castle来构建依赖项和所有内容。
顺便说一句,我一直在搞乱MEF,但我现在并没有真正看到好处,我需要做的事情可以用Castle和一些工具(帮助查询程序集和类似的东西)来完成
答案 3 :(得分:1)
MVC Portable Areas可以很好地解决这个问题
答案 4 :(得分:1)
我找到了一篇文章,阐述了你谈到的一些基本要求。不幸的是,使用ASP.NET MVC 3,这篇文章已经过时了一年,所以我重新编写了它并测试了方法,使其能够与ASP.NET MVC 4一起使用。你可以read it here。
答案 5 :(得分:0)
模块化的基本论据总是相同的......
答案 6 :(得分:0)