【问题标题】:Repositories should always return objects?存储库应该总是返回对象?
【发布时间】:2011-08-09 16:34:23
【问题描述】:

我今天遇到了这个问题,我的存储库应该总是返回完整的对象吗?他们不能返回部分数据(例如在数组中)?

例如,我的存储库 Friends 中有方法 getUserFriends(User $user),在此方法中我执行以下 DQL:

$dql = 'SELECT userFriend FROM Entities\User\Friend f JOIN f.friend userFriend WHERE f.user = ?0';

但是这样我会返回包含所有属性的用户实体,生成的 SQL 是用户表中所有字段的 SELECT。但是假设我只需要用户朋友的 id 和名称,那么获取这些值会更有趣(和快速)吗?

$dql = 'SELECT userFriend.id, userFriend.name FROM Entities\User\Friend f JOIN f.friend userFriend WHERE f.user = ?0';

这些方法在我的服务类中执行。

【问题讨论】:

    标签: php zend-framework repository-pattern doctrine-orm


    【解决方案1】:

    从数据库的角度来看,性能不会受到字段数量的太大影响,除非要返回的行数非常大(可能是数百万行):数据库最难的部分是制作关节,并从表中构建结果集。

    从 php 的角度来看,这取决于多种因素,例如复杂性和创建的对象数量。

    我会以不同的方式处理问题:我会分析和压力测试我的代码,以查看性能是否是一个问题,并决定仅在需要时进行重构(从学说转换为手工模型是时间消耗,性能提升值得吗?)

    编辑:并回答您最初的问题:如果需要,获取完整的对象将导致更容易的缓存和更好的数据封装。我会保留这些,直到它们代表一个大的性能问题。

    【讨论】:

      【解决方案2】:

      您可以在 DQL 中使用部分关键字:http://www.doctrine-project.org/docs/orm/2.0/en/reference/partial-objects.html?highlight=partial

      但只有在您的应用存在性能问题时才这样做。

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 2021-10-14
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 2017-11-21
        相关资源
        最近更新 更多