2

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

由于它保存了将数据从 API 域复制到 DB 域,因此这种方法存在一些问题:

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

另一方面,复制时有:

  • 返回(大)列表的问题。
  • 忘记将(新)属性从 API 域复制到 DB 域的一个简单警告,反之亦然。

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

4

1 回答 1

1

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

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

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

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

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

于 2013-07-08T18:01:31.837 回答