DAL、DTO 和 DAO 在包括 MVC 在内的 3 层架构风格中有什么区别

What is the difference between DAL, DTO and DAO in a 3 tier architecture style including with MVC

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

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

最重要的是我了解到

In larger applications MVC is the presentation tier only of an N-tier architecture.

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

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

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

感谢您的回答!

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

DTO

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

DAO

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

DAL

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

MVC

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

In larger applications MVC is the presentation tier only of an N-tier architecture.

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

I'd be glad if someone tell me the truth about how does it works together.

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

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

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

3 层架构:

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

现在,对于上述 3 层架构,MVC 模式发生在它的表示层(对于 webapp):

  • 数据:...;
  • 服务:...;
  • 介绍:
    • 控制器:拦截 HTTP 请求和 returns HTTP 响应;
    • 模型:将数据存储为displayed/treated;
    • 查看:整理output/display.

典型 HTTP 请求的生命周期:

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