模块化网站设计,使用ASP.NET MVC,我想要一个不那么单一的设计

时间:2014-10-24 17:22:54

标签: c# asp.net asp.net-mvc entity-framework architecture

我想以模块化方式构建网站,因此我可以获得更好的代码重用并抽象出一些实现细节。我正在寻找有关如何使用ASP.NET和Visual Studio编写此类网站的建议,以及此类网站的模块,因为目前我的网站没有这个不错的属性。

目前我正在开发一个网络应用程序,为公司提供一个非常直接的内部联系经理。我们计划为每个面向客户的独立网站(每个网站用于公司的一个业务)使用相同的联系人管理器(指向不同的数据库)。我在C#中使用ASP.NET MVC和EntityFramework。我想要的是能够简单地将这个联系人管理器包/项目/类库放到ASP.NET MVC网站的Visual Studio解决方案中,然后添加我需要的任何“连接”以使它们工作一起。我已经看到在MVC应用程序中使用“区域”,它基本上起到了迷你MVC应用程序的作用,但由于配置和不同区域需要不同版本的程序集,它实际上不易混乱且实际上不易维护(这不是我编写的代码,并且我想避免编写这样的代码)。我知道在数据对象和盒子和线图方面看起来会是什么样子;不幸的是,我不知道在视图,控制器,项目或程序集方面看起来像什么。

事实上,作为一个相对没有经验的程序员,我以前从未这样做过,所以需要有关如何继续的建议。我不熟悉我需要实现的模式/习语。因此,虽然我掌握了如何编写漂亮的模块化软件体系结构的理论知识,但我不知道它们最终看起来像它们的实际类,命名空间和Visual Studio项目/解决方案。

我的问题是,我如何建立一个比标准MVC更模块化的网站?而且,如果您有这方面的经验(或尝试过),请分享一下吗?或者甚至更好,你能提供这样一个架构的具体例子吗? (注意这可能需要链接到堆栈溢出的东西,因为你不能将整个代码库复制并粘贴到stackoverflow)。

抱歉没有具体问题,但这比“如何遍历b树”的简单查询,“为什么不是我的代码编译”更复杂,“有没有人有正则表达式做我想要的东西“,”我写了一些可怕的代码,现在它打破了“,”我没有阅读文档(假设有任何),现在我得到一个我不明白的例外“。可能没有一个答案,因为编程很复杂,解决现实世界的问题需要思考,编写好的代码可能很难。另外,我不能准确地发布我正在使用的代码因为我的合同中的这个东西被称为机密性条款,而不是任何人都会阅读数以千计的代码行并告诉我如何使其更好。 \ end_rant

2 个答案:

答案 0 :(得分:5)

我认为你正在寻找“洋葱建筑”。

onion architecture

Here's a live implementation of the Onion Architecture 结束使用Web API,MVC等的GitHub。它使用了所有熟悉的Northwind数据库。因此,在了解了这个架构并理解它并将所需的部件合并到项目/解决方案中之后,您可以浏览代码和解决方案。

此外, here's a nice tutorial 了解如何使用此方法进行开发。

最后,频道9视频是我几年前在研究同样的事情时发现的,并发现它非常有用。

ASP.NET MVC Solution Best Practices

该视频还采用了现有的整体项目,并将其转变为洋葱架构实施,并推断了我们为何在每一步都做了什么。

答案 1 :(得分:1)

首先,你必须指导自己实施系统,这种方法可以提供复杂的系统,不会让每个人都在等待。

这通常称为Domain-Driven design

然后是SOLID。 SOLID代表架构选择,使您的系统易于维护和扩展。

See SOLID in action using C#

所有这些以及Patterns of Enterprise Application Architecture可以让你忙于所有的职业生涯,但这还不够。

尝试在编程中遵循上述内容将最终给你一个不那么单一的"系统和模块化。

在ASP.NET MVC术语中,上述内容可能意味着:

  • 保持MVC范例。不要给控制器喂食超过他们应该吃的东西。保留它们只是为了它们。交通警察。也不要在你的视图中放置逻辑以保持抽象。

  • 将您的逻辑保存在一个单独的空间中#34;用'#34; space"我的意思是一个单独的项目,解决方案,装配....无论你认为适合你正在构建的应用程序大小。

  • 将MVC区域用于它们应该是什么。它们非常适合FrontEnd / Admin案例。您希望前端的外观和操作与后端不同,但是遵循一些常规系统规则。

  • 使用Web API使您的应用程序处于开放状态并且可以使用。这将使Javascript发挥作用,本身需要解决有关SOLID e.t.c ..

  • 不要仅仅因为摇动它而使用javascript框架过量使用您的应用程序。使用你真正需要的东西。

  • 使用像Ninject这样的IoC容器来管理您的依赖关系。了解您的界面并让IoC解决您的实施

  • 如果你深入了解javascript,请花点时间正确定义你的视图模型。它们是两个不同世界之间的契约,所以它们必须清楚。