Создание коллекции в классе mapper с использованием адаптера в PHP - PullRequest
1 голос
/ 03 мая 2019

У меня есть классы UserMapper и UserAdapter.Также класс UserInterface и User.

Я получаю некоторые данные от стороннего сервиса.Класс UserAdapter реализует UserInterface для сопоставления сторонних данных с моим собственным классом User.

В классе UserMapper у меня есть методы getAll, getById, delete, update.

В методе 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);
   }
}


}
...