Например, обычный магазин с обработкой заказов. Item, Order, OrderItem
Подскажите, пожалуйста, как ответить на него для двух конкретных ситуаций:
1. Как сделать процесс смены статуса заказа?
Нужно чтобы любой компонент системы (например внешняя CRM) мог обратится к заказу, поменять статус и цепочка запустилась: сохранилось в базу, отправились уведомления и т.д
В AR набросать просто:
Код: Выделить всё
class Order{
public function changeStatus($newStatus){
$this->status = $newStatus;
$this->save(false); // или updateAttributes()
$this->trigger('statusChanged');
}
}
Доменная модель же не должна знать о базе. Кто будет отвечать за сохранение, когда мы вызовем $order->changeStatus('updated') ?
2. Как запрашивать разные связные данные для одних тех же моделей?
Ситуация: Отображение заказа у клиента и у менеджера.
С одной стороны, клиент в своем заказа человек видит товары (с картинками) и сумму. Мы через репозитарий получаем модель заказа и входящие товары.
А с другой менеджер будет видеть закупочную стоимость (представим, что есть цепочка работы со складом: Contractor, ItemContractor (item, price)), будет видеть цену доставки, будет видеть, но ему не нужно описание товара)
То есть модель вроде одна и есть Order, но набор данных для нее разный.
Здесь же другой вопрос: с AR мы можем легко через relation'ы в карточке заказа вывести и информацию о поставщике и его бабушке, а в случае c отдельными репозитариями, получается выборка данных превращается в головоломку.
И самое главное получается что в одной и той же модели в разных контекстах в модели может не быть разных данных?