Здравствуйте.
Существует Склад, на котором хранится Продукция.
Есть 2 варианта взаимодействия с кол-ом продукции на складе.
1. Уходит поставка со склада. И вся продукция входящая в поставку вычитается из склада. Пишутся логи.
2. Нужно заблокировать продукцию на складе. Продукция вычитается и пишутся логи.
Для работы с продукцией должен существовать 1 класс и 1 метод или это может быть несколько различных классов. Например один для работы с поставками и другой для работы с блокировкой продукции.
То есть можно ли менять кол-во продукции из различных мест программы или это ошибка?
2 класса для работы с 1 объектом.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: 2 класса для работы с 1 объектом.
Ошибка. Для блокировки/резервирования продукции может существовать другой класс (можно и в одном, но лучше вынести в отдельный), но он должен работать со своей отдельной таблицей резервов (можна и поле выделить, если нет учета в разрезе докуметов, это зависит от политики блокировок).
Классы будут иметь приблизительно такой вид.
Таким образом мы разделяем ответсвенность. Один класс для работы с резервами, другой для работы со складом/остатками.
Классы будут иметь приблизительно такой вид.
Код: Выделить всё
class StockReserve
{
public function setReserved($productId, stockId, qty)
{
//...
}
public function getReserved($productId, stockId)
{
//...
return $qty
}
}
class Stock
{
private $stockReserve;
public function _construct(StockReserve $stockReserve)
{
$this->stockReserve = $stockReserve;
}
public function getFullStockQty($productId, stockId)
{
//выбираем из остатков
}
public function getFreeStockQty($productId, stockId)
{
//выбираем из остатков и минусуем $this->stockReserve->getReserved($productId, stockId)
}
public function getReservedStockQty($productId, stockId)
{
return $this->stockReserve->getReserved($productId, stockId);
}
//...
}