Php 在Zend框架中采用数据映射器方法
让我们假设Zend Framework应用程序的设置如下表所示Php 在Zend框架中采用数据映射器方法,php,model-view-controller,design-patterns,zend-framework,datamapper,Php,Model View Controller,Design Patterns,Zend Framework,Datamapper,让我们假设Zend Framework应用程序的设置如下表所示 user (id) groups (id) groups_users (id, user_id, group_id, join_date) 我采用数据映射器方法处理模型,该方法基本上为我提供: 模型用户,模型用户页面,模型数据库用户 模型组,模型组映射,模型表组 模型组用户,模型组用户映射器,模型表组用户(用于保存可视为实体的关系;请注意“加入日期”属性) 我正在Model_DbTable_GroupUsers中定义_refe
user (id)
groups (id)
groups_users (id, user_id, group_id, join_date)
我采用数据映射器方法处理模型,该方法基本上为我提供:
- 模型用户,模型用户页面,模型数据库用户
- 模型组,模型组映射,模型表组
- 模型组用户,模型组用户映射器,模型表组用户(用于保存可视为实体的关系;请注意“加入日期”属性)
protected $_referenceMap = array (
'User' => array (
'columns' => array('user_id'),
'refTableClass' => 'Model_DbTable_Users',
'refColumns' => array('id')
),
'App' => array (
'columns' => array('group_id'),
'refTableClass' => 'Model_DbTable_Groups',
'refColumns' => array('id')
)
);
我在考虑这些设计问题:
1) 模型组仅镜像组表中的字段。如何返回用户所属组的集合以及每个组的用户加入该组的日期?如果我只是将属性添加到域对象中,那么我必须让组映射器知道它,不是吗
2) 假设我需要获取用户所属的组。我应该把这个逻辑放在哪里模型用户映射器或模型组用户映射器
我还想利用引用映射(依赖表)机制,并可能使用findManyToManyRowset或findDependentRowset,类似于:
$result = $this->getDbTable()->find($userId);
$row = $result->current();
$groups = $row->findManyToManyRowset(
'Model_DbTable_Groups',
'Model_DbTable_GroupsUsers'
);
这将产生两个查询,而我可以在一个查询中编写它。我将把它放在Model_GroupsUserMapper类中
一个增强是向Model_User domain对象添加一个getGroups方法,该方法在需要时通过调用数据映射器中的适当方法延迟加载组,这就引出了第二个问题。我应该让域对象知道数据映射器吗?这可能是一个非常令人困惑的问题,因为关系数据库很难映射到对象模型 我倾向于首先关注您的对象模型需求。例如,如果在您的对象模型中,您的用户对象(几乎)总是知道组是有意义的,那么应该将此关系合并到用户类中。另一方面,如果您经常需要使用用户,而不需要知道他们是哪些组的一部分,那么您可能有两个用户类,一个基类和一个组感知扩展版本(基类用户和组用户) 我会尽量避免让域对象知道数据层,因为这是使用这种模式的关键。数据层应该只是一个实例化域对象的哑工厂
就我的看法:)但是检索组列表(到目前为止只是一个组对象数组)以及每个组的用户数如何?我是否应该返回一个数组数组,其中每个小数组都有两个属性—组对象和用户计数?