代码之家  ›  专栏  ›  技术社区  ›  corymathews

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

  •  2
  • corymathews  · 技术社区  · 15 年前

    我在一个ASP.NET/C Web应用程序上工作了一段时间,它的大小对于如何编程已经变得很大了。它已经变得非常难以维护,并且变得越来越难快速,以前需要1小时更新的东西现在需要3-4小时。

    我相信重新设计应用程序以使用不同的层将有助于解决这些问题。然而,我读得越多,似乎每个人都做得越不一样,但基本上实现了相同的目标。

    我已经看到了表示/ui、db、业务、服务等层。3层可能是最好的,但我不确定。

    我应该在一个Web应用程序中有哪些层,每个层应该包括或限制什么?

    最欣赏以往经验中的话。

    7 回复  |  直到 15 年前
        1
  •  5
  •   user151323    15 年前

    我认为常用的方法是有三层:表示层、业务逻辑层和数据访问层。应提供良好的基础。

    我已经说过,我需要指出的是,对ASP.NET WebForms项目而言,将其划分为不同的层并没有多大帮助。这个框架最大的问题是它的代码,它引诱开发人员创建怪物页面,同时与所有层和服务进行对话以获取要显示的数据。解决方法是首先解决这个表示层,让代码只与一个特定的层(通常是业务逻辑)交互。当(如果)这样做时,项目就可以成功地重构。

        2
  •  5
  •   bytebender    15 年前

    你说的对,每个人都做得有点不同。我们就是这样做的:

    领域

    模型类对象,如客户、帐户等。
    查找-值对象,如accounttype、indentitytype等。
    当前的存储库或dataaccessobjects在旧的应用程序上使用linqtosql和sqlclient。

    服务

    为每个模型或聚合提供服务。您也可以将其称为应用程序层。我们的想法是我们可以改变到一个不同的用户界面,它将涉及尽可能少的代码更改。

    用户界面

    目前,我们在更新的应用程序中使用ASP.NET和MVC

    我们可以将不同的“东西”插入层中,而不影响其他层。例如,如果我开始使用EntityToSQL,那么用户界面或服务层就不明智了。它只知道它创建了一个IRepository并调用findall()方法。我们还将旧的应用程序转换为MVC,在转换之前,我们将它们分离成这些层,这样当有其他东西出现时,我们希望实现我们的服务和域层,而不必更改。

    总是问你自己这应该住在哪里很重要?您的UI中的逻辑实际上应该局限于UI逻辑。重要的是让团队中的每个人都了解你的方法,并愿意执行它…

        3
  •  2
  •   Marek Tihkan    15 年前

    主要是管理依赖关系。

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

        4
  •  0
  •   Chris    15 年前

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

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

        5
  •  0
  •   Jerod Venema    15 年前

    退房 Microsoft MVC ASP.NET的模型。您所描述的问题对于ASP.NET应用程序来说非常常见,重构它以匹配MVC模型可能是解决问题的方法。别误会我-这肯定需要一些工作-但是,我知道,这是值得的。

        6
  •  0
  •   sleath    15 年前

    我相信这很大程度上取决于需求和需要什么。有许多类型的设计模式可以用来构建应用程序。我发现它有助于完全消化我试图从需求中完成的工作,并在这个网站上找到与模式匹配的内容。给予或接受特殊情况。

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

    这个站点实际上按设计模式分解设计模式。允许您根据您的需求和可伸缩性需求进行良好的匹配。

        7
  •  0
  •   RickNZ    15 年前

    传统的分层只是解决方案的一部分。不过,由于这是您的问题,我知道许多非常大的站点都是通过表示、业务逻辑和数据访问分层的。

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

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