Привет!
Работая в некоторых системах, мне часто приходится делать выборки из различных источников (nosql база данных, внешний api (или какие-то внутренних модулей), и т.д.) и чаще всего, результатом таких выборок - это массив параметров и значений.
В больших проектах мне сложно работать с этими массивами из-за множества проблем с этим.
Поэтому, я оборачиваю все эти данные в объекты:
Например:
У меня есть метод модуля работы с заказами, который возвращает заказ по его идентификатору.
Заказа - это множество параметров самого заказа, его покупателя, товары и т.д.
При проектировании, у меня получается следующее:
<?php
class Order {
private array $order_fields;
private Buyer $buyer;
private BasketItems $basket_items;
public function __construct(array $order_fields, Buyer $buyer, BasketItems $basket_items) {
$this->order_fields = $order_fields;
$this->buyer = $buyer;
$this->basket_items = $basket_items;
}
public function getId(): int { return $this->order_fields['order_id']; }
public function getAmount(): float { return $this->order_fields['order_amount']; }
public function getBuyer(): Buyer { return $this->buyer; }
public function getBasketItems(): BasketItems { return $this->basket_items; }
}
class Buyer {
private array $buyer_fields;
public function __construct(array $buyer_fields) {
$this->buyer_fields = $buyer_fields;
}
public function getId(): int { return $this->buyer_fields['id']; }
public function getFullName(): string { return $this->buyer_fields['full_name']; }
public function getPhone(): string { return $this->buyer_fields['phone']; }
}
// ...
В результате, на каком-то уровне приложения, происходит выборка, а дальше создаются все необходимые объекты, и внедряются друг в друга. (кстати, как называется этот слой приложения, и в чьей зоне ответственности эта задача ?)
Меня смущает множество классов, которые в себе очень редко содержат какую-то бизнес-логику.
И их основная задача - чаще всего получать в конструктор массив данных для текущей сущности (иногда уже готовый объект внедряется, который заранее был таким же образом собран) , и возвращать через геттеры. Возможно, это нормально, так и должно быть ? или как архитектурно правильно решать подобное?