Как красиво решить это с помощью ООП? Ребзи, подскажите как это красиво решить, с точки зрения ООП. Дан исходный класс, в котором есть 2 метода: save, delete. Есть 2-N "типа" материалов, с которыми этот класс может работать. С каждым материалом можно проводить все эти действия, но с каждым нужно делать это по разному. Если подойти к задаче с точки зрения: вот так вот это будет работать, то можно сделать это так:public function save($one,$type){ if($type == 'type_1'){ //some actions }elseif($type == 'type_2'){ //else actions } } .. Вполне логично, что это простой и действенный способ, и он долгие годы служил верой и правдой, но(!). Теперь задача немного расширилась, и "типов" может быть больше чем 2, а следовательно допиливать код таким способом - не комельфо. Вопрос: Как решить эту задачу с помощью современных техник ООП (интерфейсы, наследование, етц). Что бы для каждого типа можно было просто и легко делать расширение ф-ционала, скажем, добавлением нового класса. Если вам не сложно, то можно с примерами кода. // Забыл уточнить. Операции с методами происходят по одному и тому же алгоритму, меняются некоторые данные нужные для записи/чтения, работы по сети (разные параметры post' запроса).
Чтобы красиво решить данную задачу с помощью ООП, можно воспользоваться интерфейсами и наследованием.
Создадим интерфейс Material с методами save и delete:
interface Material { public function save($data); public function delete($id); }
Затем создадим абстрактный класс AbstractMaterial, который будет содержать общую логику для всех типов материалов:
abstract class AbstractMaterial implements Material { protected $type; public function save($data) { $postData = $this->processData($data); // сохранение данных } public function delete($id) { // удаление данных } abstract protected function processData($data); }
Теперь создадим классы для каждого типа материала, которые будут наследоваться от AbstractMaterial и реализовывать свою логику:
class Type1Material extends AbstractMaterial { protected function processData($data) { // логика обработки данных для Type1 return $processedData; } } class Type2Material extends AbstractMaterial { protected function processData($data) { // логика обработки данных для Type2 return $processedData; } }
Теперь вы можете легко добавлять новые типы материалов, создавая новый класс, наследующийся от AbstractMaterial и реализующий свою специфическую логику.
Пример использования:
$type1Material = new Type1Material(); $type1Material->save($data); $type2Material = new Type2Material(); $type2Material->delete($id);
Таким образом, вы создаете гибкую и расширяемую структуру для работы с разными типами материалов, сохраняя принципы ООП.
Чтобы красиво решить данную задачу с помощью ООП, можно воспользоваться интерфейсами и наследованием.
Создадим интерфейс Material с методами save и delete:
interface Material {public function save($data);
public function delete($id);
}
Затем создадим абстрактный класс AbstractMaterial, который будет содержать общую логику для всех типов материалов:
abstract class AbstractMaterial implements Material {protected $type;
public function save($data) {
$postData = $this->processData($data);
// сохранение данных
}
public function delete($id) {
// удаление данных
}
abstract protected function processData($data);
}
Теперь создадим классы для каждого типа материала, которые будут наследоваться от AbstractMaterial и реализовывать свою логику:
class Type1Material extends AbstractMaterial {protected function processData($data) {
// логика обработки данных для Type1
return $processedData;
}
}
class Type2Material extends AbstractMaterial {
protected function processData($data) {
// логика обработки данных для Type2
return $processedData;
}
}
Теперь вы можете легко добавлять новые типы материалов, создавая новый класс, наследующийся от AbstractMaterial и реализующий свою специфическую логику.
Пример использования:
$type1Material = new Type1Material();$type1Material->save($data);
$type2Material = new Type2Material();
$type2Material->delete($id);
Таким образом, вы создаете гибкую и расширяемую структуру для работы с разными типами материалов, сохраняя принципы ООП.