【问题标题】:What pattern is layered architecture in asp.net?asp.net中的分层架构是什么模式?
【发布时间】:2011-03-01 12:21:50
【问题描述】:

我是一名 asp.net 开发人员,对模式和架构知之甚少。如果您能在这里指导我,我将非常感激。

在我的 Web 应用程序中,我使用 4 层。

  1. 网站项目(有网页表单+cs文件后面的代码、用户控件+cs文件后面的代码、母版页+cs文件后面的代码)

  2. CustomTypesLayer 类库(具有自定义类型、枚举、DTO、构造函数、get、set 和验证)

  3. BusinessLogicLayer 类库(包含所有业务逻辑、规则和对 DAL 函数的所有调用)

  4. DataAccessLayer 一个类库(只有类与数据库通信。)

-我的用户界面只调用 BusinessLogicLayer。 BusinessLogicLayer 会自行处理并为数据调用 DataAccessLayer 函数。

-Web 表单不直接调用 DAL。

-CustomTypesLayer 被所有层共享。

请指导我这种方法是一种模式吗?我虽然可能是 MVC 或 MVP,但页面也有隐藏文件的代码,这让我感到困惑。

如果不是模式,它是否接近某种模式?

【问题讨论】:

  • 您的 CustomTypesLayer 听起来像您的域。这通常会根据您的设计跨越所有层,通常不会单独考虑一个层。

标签: c# asp.net architecture


【解决方案1】:

看看 Entity Framework 或 LinqToSQL。它们都可以从您的数据库中自动生成您的数据访问层。这将为您节省大量(无聊的)工作,并让您专注于有趣的层。

代码隐藏与架构没有任何关系——它更像是一种编码风格。这是一种将逻辑与表示分离的方法。您提到的任何架构都可以使用或不使用代码隐藏。

您似乎在描述标准的三层架构。 MVC 是一种模式,它描述了您的层和用户如何交互。用户请求一个页面(由一个视图表示),该页面从控制器请求其数据。 Controller 与您的业务层(模型)通信以提取正确的数据并将其传递给您的 View 进行显示。如果视图是交互式的,例如它允许用户更新某些东西,那么这个用户操作动作会被传回你的控制器,控制器会针对业务层调用相关的方法来将更新保存到数据库中。

希望这会有所帮助。

【讨论】:

  • 感谢 Mikey 这么好的回复,但我这里有 2 个相关问题,希望您能指导。 1. Entity Framework 和LinqToSQL 哪个更好,甚至在Linq 中LinqToSQL 最好用? 2. 使用 Entity Framework 或 Linq 会有什么分层?谢谢
  • 看看这个问题,了解比我知识渊博的人的意见...stackoverflow.com/questions/8676/… 总之,LinqToSQL 是一种快速(也许是肮脏)的方法,而 EF 是一种广泛的方法- 包含将实体作为新抽象层引入的 ORM。它非常强大,但也可能令人生畏。无论您选择哪种方式,您仍然可以在查询中使用 LINQ 语句。有人说 LinqToSQL 已死,未来在 EF。似乎 EF 可以做 LinqToSQL 可以做的所有事情,甚至更多。
【解决方案2】:

就模式而言,我建议掌握这些:

  • 我最喜欢的是Dependency Inversion Principle(DIP),也通常称为(或至少非常相似)Inversion of control(IoC)和依赖注入;它们非常受欢迎,因此您可以毫无问题地找到更多信息 - 获取示例。这对于抽象出接口背后的数据访问实现非常有用。
  • Lazy Load 也很有用。有趣的是,有时您实际上可能想要做相反的事情 - 一次性获取所需的所有数据。
  • Factory pattern 是一个非常有名的人 - 有充分的理由。
  • Facade pattern 也帮助我避免了麻烦。

维基百科有一个很好的Software design patterns列表,假设你还没有看到它。

最后要记住的是,模式分为三种基本类型(加上多线程/并发的第四类);了解这些类别并在您做此类事情时牢记它们会有所帮助,它们是:

  • 创意
  • 结构
  • 行为

【讨论】:

    【解决方案3】:

    这不是四层,而是三层,所以它是一个常规的三层架构。

    CustomTypesLayer 根本不是一个层。如果是这样,用户界面将只使用自定义类型层,不会直接与业务层对话,数据访问层也不会使用自定义类型层。

    三层架构是Multitier architecture

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多