使用模块化设计组织良好的ASP.NET应用程序的最佳方法

时间:2010-11-19 15:55:43

标签: asp.net modularity framework-design

我正在考虑为我们的产品开发考虑一个Web应用程序开发框架。我想构建一个ASP.NET应用程序,其中包含许多子模块。我的要求如下:

  1. 该应用程序将是一套不同的模块,如CRM,Bugtracker,库存管理,财务管理等。

  2. 每个模块都应该有自己的DLL。

  3. 一个项目应该是应用程序的外部容器(如框架),并且该项目应该将解决方案中的所有其他模块(类型为Web应用程序)引入外部容器。 (有些事我们在HTML中有框架)。因此,我们将仅在一天结束时发布外部容器Web应用程序,并通过该方式访问所有其他Web应用程序项目。

  4. 我想为每个模块分别使用DLL,因此在部署控制整个套件的单个DLL时,我不必担心应用程序崩溃。

    我不确定我的想法是否正确。我正在寻找的最终结果是维护良好,有条理和模块化的Web应用程序套件。

    它是ASP.NET Web表单,而不是MVC。我将使用VS2010进行开发。

    这样做的最佳方法是什么?

    修改:

    术语外部容器意味着它就像一个母版页,它有各种模块的链接,各种模块并不总是在同一个项目中。它们可以是同一解决方案下的独立项目。而且我的印象是,到那天结束时,我将只发布该项目,它将带来各种模块。

4 个答案:

答案 0 :(得分:3)

我实际上认为最好的方法是不过度架构的方法。我担心你似乎没有充分的理由生成整体架构。

这些都是新模块吗?然后开始写第一个。使用适用于单个模块的最佳实践。

然后写下第二个。你会发现你想要使用你在第一个模块中写过的东西。大。这就是重构的目的。将这些内容重构为一个或多个“库”项目,重新运行所有单元测试,然后继续第二个模块。

重复直到所有模块完成。

在此过程结束时,如果您需要您所概述的那种架构,那么您将拥有它。如果你需要更少,那么你就会少花钱,而且你不会花时间创建一个与实际需求无关的架构。

答案 1 :(得分:2)

我不会说这是一种“最佳方法”,但我建议查看Dot Net Nuke(DNN)以获得一些想法。这开始于Microsoft分发用于展示ASP.NET项目的旧“I Buy Spy”入门Web项目,并从那里起飞。

编辑:

  

1.该应用程序将是一套不同的模块,如CRM,Bugtracker,库存管理,财务管理等。

您可以使用DNN执行此操作。它们在DNN和Drupal中也被称为“模块”。

  

2.每个模块应该有自己的DLL。

是的,这是一个好主意。你会在DNN和Drupal等几个内容管理系统中看到这种东西。这样,并非同一网站的所有实现都需要安装所有模块。

我们有一个重要的网站,用于托管我们收取的“服务作为解决方案”应用程序(如果您不是精算师或会计师,您将听不到它)。过去几年的主要开发人员使用早期版本的DotNetNuke作为模型,用于重构他允许更改的应用程序部分。

答案 2 :(得分:1)

像其他人一样建议DNN可能适用于你想要做的事情。如果你想完全自己滚动,我会转向某种容器“Framework”和一堆用户控件(.ascx)的组合。容器可以像带有菜单的母版页一样简单。根据您对设计的灵活程度,您可以预制许多不同的页面,每个页面都有不同的控件(根据需要单独使用dll)。如果您希望它更具动态性,您可以拥有一个内容页面,该页面将在运行时动态加载所需的用户控件。同样,这只是一种通用方法,可能是对FSN如何实施的30000英尺视图。

答案 3 :(得分:1)

将公司/产品命名为主项目,并保持简洁明了。您可能需要一个或两个库项目来支持它 - 这些项目将包含error reporting,Web实用程序方法等等的日常通用逻辑。

接下来,选择一个您想要的sub-projects(我不喜欢这个特定上下文中的术语模块)并将其添加到您的解决方案中。无论您是重用现有项目,还是最好从头开始,您最终都会将此项目中的任何通用逻辑移到您的库中。

冲洗并重复。也许看看类似于Sueetie项目的类似项目,其中包括CMS,博客,日历,论坛等几个子项目。

以下文章在MSDN上标记为“过时”,但我仍然认为你应该看看它:

Structuring Solutions and Projects

此外,类似于模式和实践组:

Structuring Projects and Solutions in Team Foundation Source Control