基于ASP.NET MVC的模块化网站设计,我想要一个更少庞大的设计。

4
我希望以模块化的方式构建网站,这样我就可以获得更好的代码重用性并抽象出一些实现细节。我正在寻求关于如何使用ASP.NET和Visual Studio编写此类网站及其模块的建议,因为目前我的网站没有这种良好的特性。
目前,我正在开发一个Web应用程序,为公司提供一个相当直观的内部联系人管理器。我们计划为每个独立的面向客户的网站(每个网站代表公司的一个业务)使用相同的联系人管理器(指向不同的数据库)。我正在使用C#中的ASP.NET MVC和EntityFramework。我想要的是能够简单地将此联系人管理器包/项目/类库放入ASP.NET MVC网站的Visual Studio解决方案中,然后只需添加所需的“链接”即可使它们协同工作。我已经看到了在MVC应用程序中使用“区域”的用法,这些区域基本上充当小型MVC应用程序,但由于配置和不同区域需要不同版本的程序集,因此这变得混乱且难以维护(这不是我编写的代码,我想避免编写这样的代码)。我知道这在数据对象和框线图方面是什么样子,但不幸的是,我不知道在视图、控制器、项目或程序集方面是什么样子。
问题在于,作为一个相对不经验的程序员,我以前从未做过这样的事情,因此需要关于如何继续的建议。我不熟悉实现这一点所需的模式/习语。因此,虽然我有编写良好的模块化软件架构的理论知识,但我不知道它们最终看起来像它们的实际类、命名空间和Visual Studio项目/解决方案。
我的问题是,如何构建比标准MVC更模块化的网站?如果您具有此方面的经验(或尝试过),是否可以分享一下?或者更好的是,您能提供这种体系结构的具体示例吗?(请注意,这可能需要链接到不在stackoverflow上的内容,因为您无法将整个代码库复制并粘贴到stackoverflow上)。

本论坛不接受工具推荐话题。 - Keith Payne
我非常喜欢 Pluralsight 作为学习工具。你应该去看看。 - Jonesopolis
1
我认为这个问题的措辞可能需要改进,但 OP 正在寻求架构解决方案建议,当然这涉及到正确的“工具”/技术,而不是“工具”本身,尽管他在问题中提到了它。 - Shiva
“工具”这个词并不总是很清晰,我不是在问应该使用哪个IDE、语言或键盘。但是,我正在询问解决编程问题时应该使用哪些库、VS功能和资源。因此,我正在询问如何使用我拥有的工具,这与询问应该编写什么代码或为什么我的代码出错没有太大区别。这就像在问:“我应该使用哪些语言工具(语法),以及我编写的工具为什么出错”。重点是,“工具”在软件世界中并没有最好的定义。 - wtyneb
2个回答

5
我认为你正在寻找“洋葱架构”。

onion architecture

这里有一个在GitHub上使用Web API、MVC等技术并使用了众所周知的Northwind数据库的洋葱架构实现的实时示例(点击此处)。学习了这种架构并理解后,您可以浏览代码和解决方案,并将需要的部分整合到您的项目/解决方案中。
此外,这里有一个使用这种方法开发的不错的教程(点击此处)
最后,这是一个Channel 9视频,几年前我在研究同样的东西时找到它非常有用(点击此处)
该视频还将现有的单片式项目转换为洋葱架构实现,并在每个步骤上解释了我们为什么要这样做。

这似乎是我正在寻找的,如果我查看您提供的链接后确认了,我会告诉您的。谢谢! - wtyneb
那是一个漂亮的图形;那是来自微软吗? - tuespetre
不确定。这是我在答案中链接的博客之一。=> http://blog.dkmulligan.com/2013/05/16/onion-architecture/ - Shiva

1
首先,您需要根据一种方法实施系统,该方法可以提供复杂的系统,而不会让所有人因等待而感到愤怒。这通常称为领域驱动设计
然后是SOLID。SOLID代表了架构选择,使您的系统易于维护和扩展。 使用C#查看SOLID的实现 所有这些以及企业应用程序架构模式都可以让您在整个职业生涯中保持忙碌,但这可能还不够。
尝试按照上述方式进行编程最终将为您提供一个“非单片”系统和模块化。
在ASP.NET MVC术语中,以上可能意味着:
  • 保持MVC范例。不要给控制器提供比他们所需更多的信息。让他们只做他们该做的事情。交通警察。同时,不要在视图中放置逻辑以保持抽象。

  • 将逻辑保留在一个单独的“空间”中。通过“空间”这个词,我是指一个单独的项目、解决方案、程序集……你认为适合你正在构建的应用程序大小的任何东西。

  • 使用MVC区域来实现它们应该具有的功能。它们非常适合前端/管理后台的情况。你想要一个前端看起来和操作方式与后端不同,但遵守一些通用系统规则。

  • 使用Web API使应用程序开放和可扩展。这将引入JavaScript,需要考虑SOLID等方面。

  • 不要仅仅为了好玩而过度使用JavaScript框架。只使用你真正需要的。

  • 使用像Ninject这样的IoC容器来管理你的依赖关系。让你的接口和实现相结合,让IoC解决你的实现

  • 如果你深入研究JavaScript,请花时间正确定义你的视图模型。它们是两个不同世界之间的合同,因此必须清晰明了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接