【问题标题】:DTO classes, represent foreign keys on multiple valuesDTO 类,表示多个值的外键
【发布时间】:2015-02-17 10:30:48
【问题描述】:

我有一个关于 DTO 类表示的问题。我的数据库中有两张表,其中一张在另一张上有两个外键,例如:

book(id, author_name, author_age)
author(name, age, telephone)

其中书籍 author_name 和 author_age 是作者姓名和年龄的外键。

一般来说,在 DTO 类上实现这种情况的最佳方法是什么? 在 Book DTO 中,最好执行以下操作:

public class Book {
    private String id;
    private Author author;
}

或类似的东西

public class Book {
    private String id;
    private String author_name;
    private int author_age;
}

?

【问题讨论】:

    标签: mysql design-patterns dto


    【解决方案1】:

    DTO 是用于在大多数时间通过 http 或 https 通过通信通道传输值的对象。

    注意:将您的属性设为公开而不是私有。

    我们应该让它尽可能简单。

    所以像这样使用它

    public class Book {
        public String id;
        public String author_name;
        public int author_age;
    }
    

    如果您将没有 Author 对象的 DTO 与将 Author 对象转换为 json 或 xml 的 DTO 进行比较,那么没有 Author 的 DTO 的大小会更小。

    在 Book 中使用 Author 时,您只需添加额外的包装器(用于 author_name 和 author_age),这会使您在沟通渠道上花费更多。

    如果 Book 有多个作者或一对多关系,您需要这样做:

    public class Book {
        public String id;
        public List<Author> authors;
    }
    

    注意:但要确保 Author 不应该有如下 Book 实例的 back 属性。

    public class Author
    {
        public Book book;
    }
    

    在某些客户端框架中,例如淘汰赛,它会创建带有可观察对象的循环。

    【讨论】:

    • 从逻辑上讲,只有书应该有作者的引用,并且关系是一对一的。可能我需要查询哪本书写过作者,但这与 DTO 层无关
    • @giozh 是的,DTO 应该没有作者,以使其尺寸变小,请参阅更新后的答案。
    • @giozh 它只是创建了占用更多带宽的额外包装器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多