ТВЕРДЫЕ принципы при создании объектов

Вот сценарий:

Пользователь может создавать формы, используя форму.

Пользователь выберет из списка параметров формы (круг, квадрат, прямоугольник и т. Д.) И отправит форму, нажав кнопку «Создать форму».

Форма, которую он создал, будет связана с его аккаунтом.

Вот как я подхожу к этому:

Интерфейс 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. Я буду очень благодарен всем и надеюсь, что многое узнаю о принципах и о том, что я делаю неправильно.

Спасибо.


РЕДАКТИРОВАТЬ

Ссылка на твердые принципы: Твердые Принципы Википедия

0

Решение

Наконец пришли к решению обеих проблем.

Проблема с переключателем

Создайте фабричный класс, который будет возвращать требуемый объект. Это скроет условную сложность извлечения объекта со сцены.

$_POST проблема с данными

Это было на самом деле довольно легко и это здравый смысл для передачи данных в create метод вместо передачи конструктору. Передача данных в create Метод решает эту проблему, так как метод имеет дело только с созданием нового объекта, и другие части класса теперь не зависят от этого изменения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]