【问题标题】:What is the difference between DAL, DTO and DAO in a 3 tier architecture style including with MVCDAL、DTO 和 DAO 在 3 层架构风格中(包括 MVC)有什么区别
【发布时间】:2016-10-05 07:48:09
【问题描述】:

最近我在学习 ORM(对象关系映射)和 3 层架构风格(表示、业务和数据持久性)。 如果我理解正确的话,我可以将数据持久层分为DTO和DAO层。

我想了解以下部分如何在数据持久层中协同工作。

  • DAL(数据访问层)
  • DTO(数据传输对象)
  • DAO(数据访问对象)

最重要的是我了解到

在大型应用程序中,MVC 只是 N 层的表示层 架构。

我真的很困惑,例如在 3 层架构风格中,它怎么可能成为可能,其中 MVC 只是一个表示层,而 DTO、DAO、DAL 只是数据持久层的一部分。我完全迷路了。

如果有人告诉我它是如何协同工作的,我会很高兴。

请不要关闭这个问题,因为有很多不同的表达方式,我到处都看到这些东西基本上在大型应用程序中相互关联,我无法想象它是如何工作的。

感谢任何回答!

【问题讨论】:

    标签: model-view-controller orm dao data-access-layer dto


    【解决方案1】:

    让我们从每个目的开始:-

    DTO

    数据传输对象。这些通常用于将数据从控制器传输到客户端(JS)。术语也被少数人用于 POCO/POJO,它们实际上保存着从数据库中检索到的数据。

    DAO

    数据访问对象是用于实现 DAL 的设计模式之一。这会在数据库上构建和执行查询,并使用各种其他模式(包括“查询对象”、“数据映射器”等)将结果映射到 POCO/POJO。DAO 层可以使用“存储库”模式进一步扩展。

    DAL

    数据访问层使用 DAO/Repository/POCO 等抽象您的数据库活动。ORM 可帮助您构建 DAL,但也可以在不使用它们的情况下实现。

    MVC

    Model View Control 是一种用于将视图(表示)与业务逻辑分离的模式。对于 MVC,是否实现 DAL 并不重要。如果 DAL 没有实现,数据库逻辑会简单地进入你的模型,这不是一个好方法。

    在大型应用程序中,MVC 只是 N 层的表示层 架构。

    如上所述,模型会占用您的大部分业务逻辑。在 N 层应用程序中,如果为了跨应用程序/平台的可重用性而将业务逻辑完全分离,则 MVC 中的模型称为贫血模型。如果 BI 不需要在您的应用程序中以该规模重复使用,您可以使用 Model 来保存它。没有混淆,对吧?

    如果有人告诉我它是如何工作的,我会很高兴 在一起。

    所有 MV* 模式仅定义想法/概念;他们没有定义实现。 MV* 模式主要侧重于将视图与 BI 分离。专注于此。

    有关不同对象持有数据的详细信息,请参阅this 答案。

    【讨论】:

    • DAL = 持久层?
    • @YoushaAleayoub:数据访问层 (DAL) 处理数据访问以及持久性。所以.....是的:DAL = 持久层。如果您进一步决定将其拆分为两部分,例如 1) 只读 DAL(仅限读取操作)和 2) 只写 DAL(仅限创建、更新、删除操作),就像 CQRS 中的内容一样,那么不确定应该如何正确命名。在这种情况下可能是查询层和命令层。但就我个人而言,我一般使用 DAL。
    【解决方案2】:

    您可能想首先区分 MVC 模式和 3 层架构。总结一下:

    三层架构:

    • 数据:持久化数据;
    • 服务:应用程序的逻辑部分;
    • 演示文稿:hmi、网络服务...

    现在,对于上述 3 层架构,MVC 模式发生在它的表示层(对于 web 应用程序):

    • 数据:...;
    • 服务:...;
    • 介绍:
      • 控制器:拦截HTTP请求并返回HTTP响应;
      • 模型:存储要显示/处理的数据;
      • 视图:组织输出/显示。

    典型 HTTP 请求的生命周期:

    1. 用户发送HTTP请求;
    2. 控制器拦截它;
    3. 控制器调用相应的服务;
    4. 服务调用相应的dao,返回一些持久化的数据(例如);
    5. 服务对数据进行处理,并将数据返回给控制器;
    6. 控制器将数据存储在适当的模型中,并调用适当的视图;
    7. 视图使用模型的数据进行实例化,并作为 HTTP 响应返回。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 2010-11-08
      • 2011-02-20
      • 1970-01-01
      • 2013-05-31
      • 2019-07-24
      • 2011-05-20
      • 2019-07-20
      • 2017-03-07
      相关资源
      最近更新 更多