DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?

     2023-04-18     247

关键词:

【中文标题】DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?【英文标题】:DAO (data access object) best practices - examples I see use a DAO and a Services object both, what is the best practice here?DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是什么? 【发布时间】:2011-04-26 05:40:39 【问题描述】:

我正在创建一个数据访问对象,以从 Google App Engine 中检索基于 Spring 框架构建的网络应用程序的信息(这是第一次)。

我看到许多使用 Controller/webapp -> Service -> DAO -> JDO/Google-app-engine 模式的示例。

在此模式中,DAO 层是唯一了解 JDO 的层,因此如果数据存储发生更改,则该层是唯一需要替换的层。服务层调用 DAO 层并格式化/操作所需的数据。

我的问题是为什么需要额外的服务层?至少最初看起来服务层并没有给等式增加太多。我自然会想到只写一个 DAO 层来封装 JDO 请求并操作和返回数据。

谁能告诉我单独服务层的合理性,随着项目变得更大和更复杂,这会变得显而易见吗?

【问题讨论】:

【参考方案1】:

通常您将 DAO 放在服务层中,因为随着您的应用程序变得越来越复杂,您将在服务中做有用且重要的事情。例如,您可能会使用 1 个以上的 DAO 来协调复杂的数据操作。服务层还提供划分横切关注点的 API 边界,例如事务管理、授权检查、性能日志记录等。

将功能抽象为服务的另一个好处是它促进了可重用和可维护的组件。开始时,您可能只对展示一些 html 感兴趣。您编写一个加载一些数据的服务,并在服务层(表示层)之上的层中处理 html 部分。现在你想建立一个 RESTful web 服务。您的服务层可以重复使用来加载数据;您只需要担心 Web 服务端点返回的 json 或 xml(当然还有 REST 语义)。

因此,对于简单的情况,Service 层可能会增加很少的内容,但随着您的应用程序的扩展,它们变得有价值,甚至对于保持代码的简洁至关重要。

【讨论】:

【参考方案2】:

是的,最初似乎服务层并没有给等式增加太多。但是这样想吧。

服务层 = 表示层和业务层之间的层。

您一定已经意识到,在层之间分离关注点总是好的。您的服务层可以映射到不同的业务领域、表示层,而无需担心 DOA 层的使用方式。

您可以将其视为其他两个层之间的边界,在本例中是表示层和业务层之间的边界。表示层中的代码通常实现用例。典型的用例是用户执行的一系列操作,这些操作导致一个或多个业务对象、工作流和服务之间的交互。服务层允许您使用中间 API 抽象这些较小的交互,通过更粗粒度的服务公开。表示层对层中的一项服务进行一次调用。调用的服务层方法将协调业务层中的对象和工作流以实现所需的行为。

安全问题

    我确实围绕服务堆栈创建了一个安全层。这将帮助我识别用户的真实性并访问给定的服务。 我还围绕服务层定义了一个事务层,它告诉数据库引擎提交在服务层所做的更改,一旦它在成功执行后返回。

如果您要定义应用程序的层,也需要关注这些事情。

【讨论】:

DAO 实施的最佳实践

...使用DAO模式来提供对我正在构建的应用程序中的持久层的访问。为了验证的目的,我已经实现了一个围绕我的DAO实现的“包装器”。包装器接受我的DAO的一个实例作为构造函数参数,并实现与DAO类似的接口,但异常是抛出的异常... 查看详情

DTO、DAO 和实体?是实体需要吗?那三个的最佳实践?

】DTO、DAO和实体?是实体需要吗?那三个的最佳实践?【英文标题】:DTO,DAOandEntity?IsEntityneeded?Bestpraticewiththose3?【发布时间】:2021-12-1908:37:09【问题描述】:我假设如果您使用的是DTO和DAO,则不需要实体,至少我以这种方式看到... 查看详情

在抽象访问时访问数据库中数据的最佳实践

】在抽象访问时访问数据库中数据的最佳实践【英文标题】:bestpracticeforaccessingdatainadatabasewhileabstractingtheaccessing【发布时间】:2012-05-1213:32:01【问题描述】:我正在尝试学习以下场景的最佳实践。我有一组已定义的数据对象,... 查看详情

在 Rails 数据库中存储和稍后访问 JSON 对象的最佳实践

】在Rails数据库中存储和稍后访问JSON对象的最佳实践【英文标题】:BestpracticeforstoringandlateraccessingJSONobjectinrailsdatabase【发布时间】:2021-09-2114:13:13【问题描述】:我正在创建一个可以上传、分析和标记照片的Ruby-on-rails。我们正... 查看详情

Spring Transactions 和通用 DAO 和服务的最佳实践

...发JavaEE应用程序。我们开发了一个用户友好的界面来管理数据库表。随着我现在对Spring和Transactions有 查看详情

使用 restkit 和核心数据的最佳实践

】使用restkit和核心数据的最佳实践【英文标题】:Bestpracticeofusingrestkitandcoredata【发布时间】:2013-01-0709:52:32【问题描述】:我正在构建一个不断与webservice通话的应用程序。所以一直在发布和获取数据。但是我发布和获取的所有... 查看详情

最佳实践 - 从视图访问域对象列表?

】最佳实践-从视图访问域对象列表?【英文标题】:Bestpractice-Accessingdomainobjectlistfromview?【发布时间】:2011-02-0316:53:13【问题描述】:只是想知道(在Grails/Java中)在MVC设计的视图/gsp中调用:Foo.list(),而不是通过模型(即foos:Foo... 查看详情

通用 dao 架构讨论-最佳实践

】通用dao架构讨论-最佳实践【英文标题】:genericdaoarchitecturediscuss-bestprastice【发布时间】:2011-01-0121:40:04【问题描述】:我正在考虑做这个架构genericdao+interface--->servicelayer+interface--->视图层我的dao将只有通用方法,例如我的... 查看详情

访问自己/自己的对象的 REST API 最佳实践

】访问自己/自己的对象的RESTAPI最佳实践【英文标题】:RESTAPIBestPracticeForAccessingSelf/OwnObjects【发布时间】:2020-09-1320:33:34【问题描述】:假设我正在创建一个日记应用程序,我希望用户能够将条目发布到他们的日记中。我不打算... 查看详情

DAO 最佳实践:查询父/子

】DAO最佳实践:查询父/子【英文标题】:DAOBestpractices:QueryingParent/Children【发布时间】:2010-12-1806:59:45【问题描述】:假设您有一个具有简单父/子关系的域模型,并且每个实体都有自己的关联DAO,例如:AuthorAuthorDAOBookBookDAO如果... 查看详情

Spring Boot 中 JWT 的最佳实践是啥?

...ngBoot和JWT启动一个项目,我看到了一些将刷新令牌保存在数据库中的示例,所以我的问题是我必须将刷新令牌插入数据库,还是我有另一种最佳实践方式?如果我必须插入数据库,为了删 查看详情

使用hibernate时使用services和dao获取dto和实体的最佳实践[关闭]

**1。服务用法:当你看到一个hibernatespring教程时,他们都说对于一个实体(例如我的用户),你必须有一个名为UserRepository的存储库,其中包含find,findAll,delete等方法。通常,UserRepository扩展了一些基础知识库接口。然后你必须... 查看详情

访问 Spring 的安全上下文的最佳实践

...述】:我正在开发具有分层架构的应用程序:演示-服务-数据访问这个服务层的许多模块需要访问当前登录的用户。让这些模块直接访问安全上下文以获取UserDetails对象是个好主意吗?我在想,如果将来来自服务层的模块需要作... 查看详情

寻找示例数据库设计的好地方 - 最佳实践[关闭]

】寻找示例数据库设计的好地方-最佳实践[关闭]【英文标题】:GoodplacetolookforexampleDatabaseDesigns-Bestpractices[closed]【发布时间】:2011-01-2508:57:00【问题描述】:我的任务是设计一个数据库来存储我们公司的大量信息。因为任务相当... 查看详情

核心数据模型对象保存的最佳实践

】核心数据模型对象保存的最佳实践【英文标题】:Bestpracticeforcoredatamodelobjectsave【发布时间】:2015-07-3106:27:30【问题描述】:我有两个实体“Person”和“Car”来自网络服务。我需要通过核心数据将其存储在sqlite中。我想知道我... 查看详情

在 iOS 中保存访问令牌的最佳实践

...将它保存在NSUserdefaults中,但我认为这不是保存此类敏感数据的最安全方式。所以我现在的问题是:在iOS设备上存储此类数据的最佳和最安全的方法是什么?【问题讨论】:【参 查看详情

WPF 数据绑定和验证规则最佳实践

】WPF数据绑定和验证规则最佳实践【英文标题】:WPFDataBindingandValidationRulesBestPractices【发布时间】:2010-09-0823:36:42【问题描述】:我有一个非常简单的WPF应用程序,我在其中使用数据绑定来允许编辑一些自定义CLR对象。我现在想... 查看详情

DAO 级别布尔方法的最佳实践

】DAO级别布尔方法的最佳实践【英文标题】:BestpracticesforbooleanmethodsinDAOlevel【发布时间】:2018-03-2116:03:01【问题描述】:在DAO级别(Hibernate/JPA)中实现检索布尔值的方法的最佳实践是什么。返回值列表并检查null或isEmpty()或立即... 查看详情