database - 为 DB 模型重用 API 模型的设计规则

标签 database rest web-applications model entities

我们有一个 REST 后端,它与模型类一起工作,以便封装 API 调用的数据。目前,我们正在使用相同的模型类将数据映射到数据库中。

因为它节省了将数据从 API 域复制到数据库域的过程,所以这种方法存在一些问题:

  • 它引入了安全风险,因为您需要明确屏蔽不允许直接从 API 中设置在数据库中的字段,这很容易忘记。
  • API 模型类被不应通过 API 提供的数据库域特定成员“污染”。
  • 在不(意外地)更改 API 模型的情况下重构 DB 层变得更加困难。

另一方面,复制时有:

  • 返回(大)列表的问题。
  • 忘记将(新)属性从 API 域复制到数据库域,反之亦然。

我想知道是否有设计规则说明了这一点。

最佳答案

那么您可以做的是将您的业务实体(您写入数据库的模型)与数据传输对象(即使用 DTO 模式)分开。所以你最终得到的是:

  1. DTO 只是您的容器,它是来自其余部分的数据
  2. 读取传入数据、对其进行一些操作并将其转换为实体的业务逻辑,这些实体将通过 DAO 或其他方式在数据库中写入/读取。
  3. 代表您的数据库模型的模型实体。

通过这种方式,您至少可以实现关注点分离(安全性、API 更改、数据传输)。

现在这就像生活中的一切(除了啤酒 :))都有它的负面影响: 例如,您得到重复的代码(您必须从 dto 中的数据库实体复制模型),这可能会产生一些开销。

希望对您有所帮助。 不知道您使用的是什么语言,但这是 java 中的一个示例: http://www.oracle.com/technetwork/java/transferobject-139757.html

关于database - 为 DB 模型重用 API 模型的设计规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485445/

相关文章:

java - restTemplate 交换经常会导致 400 错误

java - 警告 : The (sub)resource method contains empty path annotation

java - 将 webapp 暴露到网络上?

javascript - 我无法在我的 API 中发布我的 json URL 文件中的元素

web-applications - 为什么https仅用于登录?

java - 如何在 Java Web 应用程序中获取服务器名称

database - 我们可以跨多个 oracle 用户查询多个表并在 Django 的管理 UI 中将行表格化吗

sql - 错误 : syntax error at or near "SELECT"

python - (Python/JSON/MySQL) 关于 JSON 格式的财务数据不会传输到数据库的建议

MySQL 存储过程 - 递增变量