douyuben9434 2010-11-19 19:03
浏览 32
已采纳

需要多个Data Mapper的域对象

I'm trying to figure out how to reuse Domain Models in different parts of the application and I have a feeling that the Data Mapper pattern is the way forward. The example below has methods that directly access the methods of the Mapper.

class Groups
{
    protected $_groups = array();

    public function addGroup($name)
    {
        $this->_groups[] = $name;
    }

    public function doSomethingGroupy($cakes)
    {
        // get all the groups that have cake
        return $cakeyGroups;
    }
}

... And a mapper to match the methods on the Groups class.

class GroupMapper
{
    public function find($id, Groups $group)
    {
         // Mappy type things, maybe some sql
    }

    public function fetchByNeediness($cuddles, Groups $group)
    {
         // More mappy type things
    }

    public function save(Groups $groups)
    {
         //  Saves
    }
}

However if sometime later I wanted to use the same Groups Models but populate the groups using different queries I would use a different mapper.

class AngryGroupMapper
{
    public function find($id, Groups $group)
    {
        // Something similar but with other tables and joins
    }

    public function fetchByRage($anger, Groups $group)
    {
        // Something new but only needed here
    }

    public function isEditable(Groups $groups)
    {
         // Do some querying
         return $bool;
    {
}

Now I Know the aim is Skinny Controller - Fat Model, so would I have another model to Map the Mapper (so to speak) to the Model?

class FatModelRepository
{
    public function getHappyGroups()
    {
        $mapper = new GroupMapper();
        return $mapper->fetchByNeediness('Puffy Shoes', new Groups());
    }

    public function getSadGroups()
    {
        $mapper = new AngryGroupMapper();
        return $mapper->fetchByRage('Aghh!', new Groups());
    {

    public function save(Groups $groups)
    {
        $mapper = new GroupMapper();
        return $mapper->save($groups);
    {
}
  • 写回答

2条回答 默认 最新

  • doujian1050 2010-11-19 19:24
    关注

    The Data Model should have no knowledge of the Data Mapper. Your Groups class/model shouldn't have find methods and it should not have access to the mapper.

    Once you remove the mapper dependency from your model your problems will go away.

    NOTE: check out Doctrine 2

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名