【问题标题】:How to fetch Objects from Model/Service layer如何从模型/服务层获取对象
【发布时间】:2013-10-22 03:13:34
【问题描述】:

在我们正在开发的应用程序中,我们有服务、映射器和实体。我们没有使用 ORM。在应用程序中,我们有 GroupGroupMemberMember 实体。 GroupMember 实体具有 groupIdmemberIdmemberAccess 属性。 memberAccess 字段告诉我们MemberGroup 中的访问级别。现在我们需要获取

  1. 成员具有特定访问级别的所有Groups。 (通过提供memberId
  2. 所有Groups,其中成员是成员及其访问权限。 (通过提供memberId
  3. 组内的所有Members 都有他们的访问权限。 (通过提供groupId

以下各项应使用哪些服务的任何想法。以及它们将如何交互以获取特定数据。

【问题讨论】:

    标签: service zend-framework2 entity domain-driven-design mapper


    【解决方案1】:

    1) MembershipMapper:在此处实现您的查询,返回实体数组(查看 ZfcBase\Mapper\AbstractDbMapper 作为基类)

    function getGroupsForMember($member, $access = null)
    function getMembersForGroup($group, $access = null)
    

    2) MembershipServive:在Module.php 中的getServiceConfig 下将此服务添加到服务管理器。使用闭包创建一个新的 MembershipService 并将 MembershipMapper 注入其中。组/成员函数可能只是映射器的代理。

    function setMembershipMapper($membershipMapper)
    function getMembershipMapper()
    function getGroupsForMember($member, $access = null)
    function getMembersForGroup($group, $access = null)
    

    3) Controller:将 MembershipService 注入到控制器中(您可以像使用闭包创建服务一样执行此操作)。然后调用服务上的方法。

    在服务/控制器管理器中创建服务/映射器/控制器的示例(在 Module.php 中)

    public function getServiceConfig() 
    {
        return array(
            'factories' => array(
                'MembershipService' => function (Zend\ServiceManager\ServiceManager $sm) {
                    $service = new YourNS\Service\Membership();
                    $service->setMembershipMapper($sm->get('MembershipMapper'));
                    return $service;
                },
                'MembershipMapper' => function ($sm) {
                    $mapper = new \YourNS\Mapper\Membership();
                    return $mapper;
                },
        );
    }
    
    public function getControllerConfig() 
    {
        return array(
            'factories' => array(
                'YourNS\Controller\Something' => function (Zend\Mvc\Controller\ControllerManager $cm) {
                    $controller = new YourNS\Controller\Something();
                    $controller->setMembershipService($cm->getServiceLocator()->get('MembershipService'));
                    return $controller;
                },
    }
    

    【讨论】:

    • 谢谢。仍然很困惑。如果我需要获取一个成员所属的所有组,访问+组创建者,我将使用getGroupsForMember,它将返回一个Membership对象数组(groupId,userId,access )。现在如何显示Group 的名称和组创建者。 Group 具有 creatorId 属性。所以我想我需要遍历每个成员,获取groupId,创建一个Group 对象,从Group 获取creatorId,然后再次访问持久性以创建创建者的User 对象。所以我最终会得到 2*NoOfGroups 数据库旅行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多