У меня есть классы 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);
}
}
}