使用PHP中的适配器在mapper类中创建集合

时间:2019-05-03 13:27:29

标签: php design-patterns adapter mapper

我有UserMapper和UserAdapter类。也是UserInterface和User类。

我从第三方服务中获得了一些数据。 UserAdapter类实现了UserInterface,以将第3方数据与我自己的User类进行匹配。

在UserMapper类中,我具有getAll,getById,删除,更新方法。

在getAll方法中,我想返回一组用户。我也有一个Users数组迭代器类。 getAll方法从第三方获取原始数据。通过foreach循环,我创建了User对象,并将它们附加到集合中。最后,我返回一个Users集合。

问题是创建User对象不是那么优雅。我正在寻找一种更好的方法来做同样的事情。我可能会混淆一些设计模式,所以如果想法完全错误,请修复我。

注意:使用类和几种方法可以轻松完成同一件事,但主要思想是将第三方数据脱钩并创建纯域层。还返回适当的对象/数据类型,以简化调试和易于理解的代码。有简化的示例。真正的业务逻辑比这更复杂。

User implements UserInterface {
  protected $id;
  protected $name;
  protected $age;
  protected $sex;

  public function __construct($id) {
     $this->id = $id;
  }

  public function getId() {
     return $this->id;
  }

  public function setName($name) {
     $this->name = $name;
  }

  public function getName() {
     return $this->name;
  }

  public function setAge($age) {
     $this->age = $age;
  }

  public function getAge() {
     return $this->age;
  }

  public function setSex($sex) {
     $this->sex = $sex;
  }

  public function getSex() {
     return $this->sex;
  }
}

UserInterface {
  public function getId();
  public function getName();
  public function getAge();
  public function getSex();
}


UserAdapter implements UserInterface {
  protected $rawData;

  public function __construct($rawData) {
     $this->rawData = $rawData;
  }

  public function getId() {
     return $this->rawData['id'];
  }

  public function getName() {
     return $this->rawData['name']
  }

  public function getAge() {
     return $this->rawData['age']
  }

  public function getSex() {
     return $this->rawData['sex']
  }

Users extends IteratorIterator {
   private $iterator;

    public function __construct(ArrayIterator $iterator)
    {
        $this->iterator = $iterator;
        parent::__construct($iterator);
    }

    public function current(): User
    {
        parent::current();
    }

    public function toArray()
    {
        return iterator_to_array($this->iterator, true);
    }
}


UserMapper {
   public function getAll($rawUsers): Users {
      $users = new ArrayIterator();
            foreach ($$rawUsers as $rawUser) {
           $adapter = new UserAdapter($rawUser);
           $user = new User($adapter->getId());
           $user->setName($adapter->getName());
           $user->setAge($adapter->getAge());
           $user->setSex($adapter->getSex());
           $users->append($user);
            }
      $return new Users($users);
   }
}


}

0 个答案:

没有答案