【问题标题】:Modular Website Design, with ASP.NET MVC, I want a less-monolithic design [closed]模块化网站设计,使用 ASP.NET MVC,我想要一个不那么单一的设计 [关闭]
【发布时间】:2014-12-20 14:18:36
【问题描述】:

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

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

问题是,作为一个相对缺乏经验的程序员,我以前从未这样做过,所以需要有关如何进行的建议。我不熟悉实现这一点所需的模式/习语。因此,虽然我掌握了如何编写良好的模块化软件架构的理论知识,但我不知道它们最终看起来像它们的实际类、命名空间和 Visual Studio 项目/解决方案。

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

抱歉没有具体问题,但这比简单查询“如何遍历 b-tree”、“为什么我的代码没有编译”、“是否有人有正则表达式做我想做的事”,“我写了一些糟糕的代码,现在它坏了”,以及“我还没有阅读文档(假设有),现在我遇到了一个我不明白的异常”。可能没有一个单一的答案,因为编程很复杂,解决现实世界的问题需要思考,而编写好的代码可能很困难。另外,我不能准确地发布我正在使用的代码,因为我的合同中有一个被称为保密条款的东西,并不是说有人会通读数千行代码并告诉我如何让它变得更好. \end_rant

【问题讨论】:

  • 工具推荐在本论坛中是题外话。
  • 我真的很喜欢 Pluralsight 作为学习工具。你应该检查一下。
  • 我认为这个问题可能措辞更好,但 OP 正在寻找架构解决方案推荐,这当然涉及正确的“工具”/技术,而不是“工具”本身,即使他提到了它在问题中。
  • 好吧,“工具”并不总是很清楚,我不是在问要使用哪种 IDE、语言或键盘。但是,我在问我应该使用哪些库、VS 功能和资源来解决编程问题。所以,我在问我应该如何使用我拥有的工具,这与问我应该写什么代码或为什么我的代码被破坏没有太大区别。这就像问“我应该使用什么语言工具(语法),为什么我写的工具坏了”)。重点是,“工具”在软件世界中没有最好的定义。

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


【解决方案1】:

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

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

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

最后,我在几年前研究同一件事时最初发现的第 9 频道视频,发现它非常有用。

ASP.NET MVC Solution Best Practices

该视频还采用了一个现有的单体项目并将其转化为洋葱架构实施,并解释了我们为什么在每一步都做些什么。

【讨论】:

  • 这似乎是我正在寻找的东西,我会在我查看你链接的内容后告诉你。谢谢!
  • 这是一个漂亮的图形;是微软的吗?
  • 不确定。它来自我在回答中链接到的博客之一。 =>blog.dkmulligan.com/2013/05/16/onion-architecture
【解决方案2】:

首先,您必须指导自己根据一种方法来实施您的系统,该方法可以提供复杂的系统,不会让每个人都迫不及待地等待。

这通常称为Domain-Driven design

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

See SOLID in action using C#

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

在您的编程中尝试遵循上述原则最终会为您提供“不那么单一”的系统和模块化。

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

  • 保留 MVC 范例。不要喂你的控制器超过他们应该吃的东西。只保留它们的本来面目。交警。也不要将逻辑放在视图中以保持抽象。

  • 在单独的“空间”中维护您的逻辑。 “空间”这个词是指一个单独的项目、解决方案、程序集....任何您认为适合您正在构建的应用程序大小的东西。

  • 按照应有的方式使用 MVC 区域。它们非常适合前端/管理员案例。您希望前端的外观和操作与后端不同,但要遵守一些通用系统规则。

  • 使用 Web API 使您的应用程序开放且可扩展。这将使 Javascript 发挥作用,这本身就需要解决 SOLID 等问题。

  • 不要仅仅为了动摇而使用 JavaScript 框架来过度使用您的应用程序。使用你真正需要的东西。

  • 使用像 Ninject 这样的 IoC 容器来管理你的依赖项。嫁接你的接口,让 IoC 解决你的实现

  • 如果您深入研究 javascript,请花时间正确定义您的视图模型。它们是两个不同世界之间的契约,所以必须明确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2011-08-27
    • 2014-05-05
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多