Как красиво решить это с помощью ООП? Ребзи, подскажите как это красиво решить, с точки зрения ООП.
Дан исходный класс, в котором есть 2 метода: save, delete.
Есть 2-N "типа" материалов, с которыми этот класс может работать. С каждым материалом можно проводить все эти действия, но с каждым нужно делать это по разному. Если подойти к задаче с точки зрения: вот так вот это будет работать, то можно сделать это так:public function save($one,$type){
if($type == 'type_1'){
//some actions
}elseif($type == 'type_2'){
//else actions
}
}
..
Вполне логично, что это простой и действенный способ, и он долгие годы служил верой и правдой, но(!).
Теперь задача немного расширилась, и "типов" может быть больше чем 2, а следовательно допиливать код таким способом - не комельфо.
Вопрос: Как решить эту задачу с помощью современных техник ООП (интерфейсы, наследование, етц). Что бы для каждого типа можно было просто и легко делать расширение ф-ционала, скажем, добавлением нового класса.
Если вам не сложно, то можно с примерами кода.
// Забыл уточнить. Операции с методами происходят по одному и тому же алгоритму, меняются некоторые данные нужные для записи/чтения, работы по сети (разные параметры post' запроса).

21 Авг 2019 в 07:09
262 +1
0
Ответы
1

Чтобы красиво решить данную задачу с помощью ООП, можно воспользоваться интерфейсами и наследованием.

Создадим интерфейс 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);

Таким образом, вы создаете гибкую и расширяемую структуру для работы с разными типами материалов, сохраняя принципы ООП.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 85 341 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир