如何从模型/服务层获取对象

时间:2013-10-22 03:13:35

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

在我们正在开发的应用中,我们有服务,映射器和实体。我们没有使用ORM。在应用中,我们有GroupGroupMember& Member个实体。 GroupMember实体拥有groupIdmemberId& memberAccess属性。 memberAccess字段告诉我们MemberGroup的访问级别。现在我们需要获取

  1. 成员具有特定访问级别的所有Groups。 (通过提供memberId
  2. 成员所属的Groups及其访问权限。 (通过提供memberId
  3. 具有访问权限的群组中的所有Members。 (通过提供groupId
  4. 任何想法应该为以下各项使用哪些服务。以及他们如何互动以获取特定数据。

1 个答案:

答案 0 :(得分:3)

1) MembershipMapper :在这里实现你的查询返回实体数组(看看ZfcBase \ Mapper \ AbstractDbMapper作为基类)

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

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

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

3)控制器:将您的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;
            },
}