【问题标题】:Designing a DataMapper for objects that sometimes need to aggregate other objects but not always为有时需要聚合其他对象但并不总是需要聚合的对象设计 DataMapper
【发布时间】:2011-02-25 23:24:32
【问题描述】:

我有一个名为 student 的对象,它映射到一个学生表。还有一个课程表和 user_courses 表,用于将学生分配给课程。这个学生对象可以有许多课程对象,因此,使用我的学生数据映射器,它将检索学生对象和学生注册的课程的任何课程对象。这适用于我需要所有这些信息的情况,但是在我只需要显示学生姓名和姓氏的情况下,课程对象的检索是不必要的。我的问题是,我应该如何设计我的 dataMappers 来解决这个问题?我是否应该为不同级别的学生对象设置单独的映射器,即仅包含基本学生信息的 baseStudentObject,然后是另外包含课程对象的 extendedStudentObject?或者更好地实施某种延迟加载解决方案?一如既往,非常感谢所有输入!干杯。

【问题讨论】:

    标签: php object lazy-loading datamapper oop


    【解决方案1】:

    我会说这是一种权衡。在设计方面,延迟加载路线是最好的选择。您真的不希望人为地让不同类型的 Student 漂浮在周围,堵塞您的域模型。如果你有一个基本的Student 和一个StudentWithCourses 作为快速破解,当然这不是世界末日,但它可能会很快变得混乱。您最终可能会得到StudentWithContactsStudentWithCoursesButNotContacts 等...您明白我的意思,这并不是真正的面向对象设计。通过延迟加载,您的模型中将只有一个 Student 实体,它更接近真实域。

    也就是说,实现延迟加载并非易事。因此,如果时间至关重要,请参加两个课程。当您有时间进行重构时,您可以添加延迟加载。

    (或者,当然,您可以使用现有的数据映射 ORM,例如 Doctrine。)

    【讨论】:

    • 谢谢 ngm,非常简洁并回答了我的问题!感谢您的时间和投入。已经开始研究 Doctrine,它看起来很棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多