Задать вопрос

Архитектура приложений. Как реализовать связь сущность-модель?

Добрый день! Жил себе счастливо пока не узнал что в архитектуре должен присутствовать слой классов-сущностей, описывающих предметную область. Вся бизнес-логика должна оперировать именно этими объектами (а не объектами модели данных, как у меня раньше). Примерно так:
на входе $id заказа 

$orders = new Orders();
$order = new Order();
$order = $orders->get_order_by_id($id); //получаем заказ по id
$order->sum = 100; //меняем сумму заказа на 100
$orders->change_order($order);  //изменяем заказ

Всё красиво, наглядно, код не зависит от способа хранения данных, нам не важно как и откуда get_order_by_id получает данные, а change_order сохраняет и т п. Но это до тех пор пока в классе Order не появились поля "Работы по заказу", "Материалы по заказу", которые представляют собой массивы объектов типа Work и Material.
class  Order
{
   public $works = array();
   public $materials = array();
   public $sum;
}


Ну и собственно вопрос, допустим мне нужно вывезти все заказы. С учётом добавленных полей $works и $materials в методе
$orders->get_order_by_id($id)
становится много обращений к базе. Помимо поучения самого заказа из БД, нужно еще одним селектом получить работы по заказу (заполнить массив $works) и еще одним материалы по заказу (заполнить массив $materials). Итого 3 обращения к базе для одного заказа. А если нужно вывести заказов сотню другую? А ведь объекты work сам по себе могут содержать такие поля, например список исполнителей, допущенных к выполнению данной работы. Так что придется опять лезть в базу. не могу же я вернуть "недоделанный" объект work, без исполнителей. Другое дело что обычно, при выводе заказов в таблицу список исполнителей для работ и не нужен. Так что, возвращать объект work без него?

Можно конечно обойтись одним селектом, но в нём придется вывести только по одной работе и одному материалу (допустим просто первые в массиве). Но тогда объект Order уже не будет тем чем задумывался, в нём вместо массива работ будет только одна работа.
Кто-нибудь сталкивался, как это всё обходится? Или забить на эти сущности и проблема отпадает сама собой.
  • Вопрос задан
  • 207 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@heartdevil
плыву как воздушный шарик
Привет.

Загружайте связанные сущности works и materials не сразу, а по требованию.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы