有关如何分层ASP.NET / C#Web应用程序的最佳实践

时间:2009-11-20 17:30:42

标签: c# asp.net

我已经在ASP.NET / C#Web应用程序上工作了一段时间,它的大小已经变得很大,因为它是如何被编程的。它变得非常难以维持并且变得越来越难,过去需要1小时更新的东西现在需要大约3-4小时。

我认为重新设计应用程序以使用不同的层将有助于解决许多这些问题。然而,我读的越多,似乎每个人都以不同的方式做到这一点,但实现了大致相同的目标。

我已经看过诸如Presentation / UI,DB,Business,Services等层。看来3层可能是最好的,但我不确定。

我应该在网络应用中包含哪些图层,每个图层应包含哪些内容?

以前的经验中的单词非常受欢迎。

7 个答案:

答案 0 :(得分:5)

我认为通常的方法是有3层:演示,业务逻辑和数据访问。它应该提供一个良好的基础。

话虽如此,我需要指出,分层分层对ASP.NET WebForms项目可能没什么帮助。这个框架的最大问题是它背后的代码诱使开发人员创建怪物页面,同时与所有层和服务通信以获取要显示的数据。解决方法是首先计算出这个表示层,让代码只与一个特定层(最常见的是业务逻辑)进行交互。何时(以及如果)完成此操作,则可以成功重构项目。

答案 1 :(得分:5)

你说的每个人都有所不同。我们就是这样做的:

模型 - 类对象,如客户,帐户等。
LookUp - 值对象,如AccountType,IndentityType等。
目前我们在旧版应用程序中使用LinqToSql和SQLClient存储库或DataAccessObject。

服务

每个模型或聚合的服务。您也可以将其称为应用程序层。我们的想法是,我们可以更改为不同的UI,并尽可能少地进行代码更改。

UI

目前我们在新的应用程序中使用Asp.net和MVC

我们的想法是,我们可以在图层中插入不同的“东西”,而不会影响其他图层。恩。如果我开始使用EntityToSql,那么UI或服务层就更聪明了。它只知道它创建了一个IRepository并调用了FindAll()方法。我们还将旧的应用程序转换为MVC,在我们这样做之前,我们将它们分成这些层,因此当出现其他内容时,我们希望实现我们的服务和域层不必更改。

重要的是始终要问自己应该在哪里居住? UI中的逻辑应该仅限于UI逻辑。重要的是让团队中的每个人都了解您的方式并愿意实施它......

答案 2 :(得分:2)

主要是管理依赖关系。

好的例子是Sharp Architecture projectsArc projects。您可以下载一些开源示例应用程序以获得更多洞察力。

答案 3 :(得分:0)

我认为这在很大程度上取决于要求和所需要的。构建应用程序的方法有很多种设计模式。我发现完全消化我想要完成的要求并找到与本网站上的模式匹配是有帮助的。给予或采取独特的情况。

http://www.blackwasp.co.uk/DesignPatternsArticles.aspx

该网站实际上按设计模式划分了设计模式。允许您根据需求和可扩展性需求进行良好匹配。

答案 4 :(得分:0)

关注分离可能是查看Web应用程序和破坏内容的更好方法。比方说,如果你有一个页面正在进行数据访问,验证和显示项目,你可以采取每个项目,并创建它自己的类,这样你在每个类中只有一种类型的事情发生。然后,当您完成并重新开始重构代码时,您可以开始将相同类型的类分组到相同类型的文件夹,名称空间和项目中。

祝你好运,你有很多工作要做。

答案 5 :(得分:0)

查看ASP.NET的Microsoft MVC模型。您描述的问题对于ASP.NET应用程序非常常见,并且重构它以匹配MVC模型可能是要走的路。不要误会我的意思 - 这肯定需要一些工作 - 但恕我直言,这是值得的。

答案 6 :(得分:0)

传统的分层只是解决方案的一部分。既然这是你的问题,我知道许多非常大的网站,它们通过演示,业务逻辑和数据访问进行分层。

但是,您可以/应该做的更多,包括:

  1. 分层和分工:以可维护的方式在Web层和数据层之间划分业务逻辑(通常意味着使用存储过程而不是动态SQL)
  2. 重构您的应用程序。在许多站点中,由于对持续重构的关注不足,页面变得庞大且难以管理。使用自定义用户控件,母版页,公共页面基类,ASP.NET外观,页面适配器,控件适配器,HttpModule等方法将应用程序范围的逻辑移动到可集中管理的位置。
  3. 认真遵守OO设计原则。
  4. 战略性地使用事件来帮助确保关注点的一致分离。