【问题标题】:Design rule for reusing API models for DB models数据库模型重用 API 模型的设计规则
【发布时间】:2013-07-05 09:23:27
【问题描述】:

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

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

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

另外一边,复制的时候有:

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

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

【问题讨论】:

    标签: database rest web-applications model entities


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 好的,这意味着对于我们的后端,我们有 2 组 DTO:一组用于 API 域,一组用于 DB。我更喜欢在(一个微小的)优化之上进行分离(不易出错),这样才有意义,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多