Вот сценарий:
Пользователь может создавать формы, используя форму.
Пользователь выберет из списка параметров формы (круг, квадрат, прямоугольник и т. Д.) И отправит форму, нажав кнопку «Создать форму».
Форма, которую он создал, будет связана с его аккаунтом.
Вот как я подхожу к этому:
Интерфейс Shape
с подписью метода к create()
форма, которая будет реализована отдельными классами фигур.
# Shape.php
interface Shape {
public function create();
public function area();
}
# Rectangle.php
class Rectangle implements Shape {
private $user;
private $data; # user submitted data
public __construct($user, $data) {
$this->user = $user;
$this->data = $data;
}
public function create() {
# get rectangle shape details from RectangleShapeAPI
$userShape = new UserShape; # the model to store data
$userShape->shape_id = $this->data['shape_id'];
$userShape->area = $this->area();
$userShape->users_id = $user->id;
# save rectangle shape details from API
if (!$userShape->save()) {
return false;
}
return true;
}
public function area() {
return $this->data['length'] * $this->data['breadth'];
}
}
Теперь я должен switch($shapeType)
над типом формы, выбранным пользователем для создания экземпляра Square
или же Circle
или же Rectangle
классы соответственно.
$data = $_POST;
switch($shapeType) {
case 'square':
Shape $shape = new Square($user, $data);
$shape->create();
break;
and so on...
}
Это мой первый шаг к реализации
SOLID Principles
и я
думаю, я, возможно, понял это неправильно. Пожалуйста, прости меня в этом случае.проблема это я думаю, что оператор switch (я видел примеры
где люди пытаются устранитьswitch
или жеconditions
когда они пытаются
использовать эти объекты). Я видел это только во время использования
объекты, которые я думаю, возможно очень легко. Но можем ли мы достичь
то же самое во время создания объекта (я не могу найти какой-либо
логическое решение этого, кромеswitch
над формами).Другое дело, как справиться с
$_POST
данные эффективно как
ключи к массиву могут измениться в будущем, и может случиться что угодно. Как
Вы бы справились с этим сценарием?
Приведенное выше объяснение является упрощенной версией моего случая.
у меня есть Accounts
Интерфейс с add()
метод, который реализуется FacebookAccount
, GoogleAccount
и другие занятия.
Теперь методы add()
эти учетные записи различны, поэтому используются в качестве интерфейса. Facebook
или же Google
объекты API создаются и пользовательские данные выбираются для хранения в UserAccount
, Учетные записи связаны с пользователем.
Я приветствую всех тех, кто хочет дать мне свой путь к решению этой проблемы, используя принципы SOLID. Я буду очень благодарен всем и надеюсь, что многое узнаю о принципах и о том, что я делаю неправильно.
Спасибо.
РЕДАКТИРОВАТЬ
Ссылка на твердые принципы: Твердые Принципы Википедия
Наконец пришли к решению обеих проблем.
Проблема с переключателем
Создайте фабричный класс, который будет возвращать требуемый объект. Это скроет условную сложность извлечения объекта со сцены.
$_POST
проблема с данными
Это было на самом деле довольно легко и это здравый смысл для передачи данных в create
метод вместо передачи конструктору. Передача данных в create
Метод решает эту проблему, так как метод имеет дело только с созданием нового объекта, и другие части класса теперь не зависят от этого изменения.
Других решений пока нет …