Мужики, нужна помощь. Есть товар. У него к примеру четыре поля в БД. ID, название, цена, описание. В классе Product есть методы setName(id, name), setPrice(id, price), setDescription(id, text).
Раньше я создавал общий метод update и туда добавлял ассоциативный массив с ключами (id, price, name, description), но со временем понял, что расширяться можно только редактированием основного класса, а это противоречит принципу ооп.
Как верно выстроить логику редактирования товара на примере этих четырех полей?
В голову пришло три способа:
1. Оставить как есть и менять ПО ОДНОМУ значению (минус в том, что придется делать submit на каждое поле в форме)
2. Принимать ассоциативный массив и редактировать в одном методе update.
3. Написать промежуточный метод, который на основе ассоциативного массива соберет конструкцию типа
$obj->setId($id);
$obj->setName($name);
$obj->setPrice($price);
$obj->Update();
Оставить как есть и менять ПО ОДНОМУ значению (минус в том, что придется делать submit на каждое поле в форме)
Я так понимаю это не mcv?
По идее у Вас сбором данных из post и формированием запросов, должен заниматься родительский класс. который понятия не имеет сколько у Вас там полей в базе и что они вообще такое.
В частности, рекомендую: https://ru.wikipedia.org/wiki/ActiveRecord
Максим Тимофеев, дело не в том, mvc это или нет. Просто я создал класс Product, который создает, редактирует и удаляет товар. Всего три метода. В метод create попадает ассоциативный массив, тк нужны ВСЕ поля сразу. Удаление вообще только номер. А вот с редактированием можно сделать разными способами. Если создаю метод changePrice то его легко понять. $obj->changePrice(100, 1000); и всё, я не вспоминаю спустя время как там работает внутри класс. Я четко знаю, что такая конструкция изменит цену у товара номер 100.
А вот когда передаю ассоциативный массив, то тут надо вспоминать как работает класс и что ему нужно для того, чтобы метод работал.
Надеюсь получилось объяснить суть)))
Макс Васильев, Я так понимаю должен быть метод типа ->load($data) который изменяет все атрибуты на базе массива, удобно для обработки пришедших из формы данных. Но почему он должен исключать наличие метода ->changePrice(100, 1000)? Они же удобны в совершенно разных случаях, зачем выбирать между ними?
У Вас лимит методов кто-то задал, бьют по рукам?