DAL,DTO和DAO在3层架构风格(包括MVC)之间有什么区别

Bál*_*Pap 15 model-view-controller orm dao data-access-layer dto

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

我想了解,以下部分如何在数据持久层中一起工作.

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

最重要的是,我了解到了这一点

在较大的应用程序中,MVC是仅N层架构的表示层.

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

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

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

我很感激任何答案!

Ami*_*shi 15

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

DTO

数据传输对象.这些通常用于将数据从控制器传输到客户端(JS).POCO/POJO也被少数用于实际保存从数据库中检索的数据.

DAO

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

DAL

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

MVC

模型视图控件是一种模式,用于将视图(表示)与业务逻辑分开.对于MVC,DAL是否实现并不重要.如果未实现DAL,数据库逻辑只会进入您的模型,这不是一个好方法.

在较大的应用程序中,MVC是仅N层架构的表示层.

模型消耗了大部分业务逻辑,如上所述.在N层应用程序中,如果业务逻辑完全分离以便跨应用程序/平台重新使用,那么MVC中的模型称为贫血模型.如果BI不需要在您的应用程序中以该比例重复使用,则可以使用Model来保存它.没有混乱,对吗?

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

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

有关不同对象保存数据的详细信息,请参阅答案


小智 6

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

三层架构:

  • 数据:持久化数据;
  • 服务:应用程序的逻辑部分;
  • 介绍:人机界面、网络服务...

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

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

典型 HTTP 请求的生命周期:

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