> Фабричный метод с маппингом - подход имеющий право на жизнь. Вопрос в
> том, для чего это применять.
> Очевидно, что у вас есть некая универсальная форма, которая посылает ид типа
> создаваемого документа. И дальше вы создаете документ исходя из его ид.
> И в базу потом пишете с тем же самым ид.
> Вместо этого можно для каждого типа документа сделать свои формы, тип создаваемого
> документа разруливать по маршруту обработчика, ид для базы держать в константе
> класса и работать с ним только при записи в базу -
> то есть, в контроллере вообще никогда.Не хотел в нудные подробности углубляться, но если это поможет пониманию и оконкретит что главное как лучше это реализовать, то вот, опишу более полно и близко к оригиналу:
Есть такая сущность, как Статья. Это сущность из которой будет формироваться условно страница с самой этой Статьёй:
//Отображение её в БД
TABLE Article (
id SERIAL PRIMARY KEY,
title CHAR(20) NOT NULL
)
Статья состоит из кусков разных типов объектов - Частей Статьи.
//Отображение Частей Статьи в БД
TABLE ArticleParts (
id SERIAL PRIMARY KEY,
artID BIGINT UNSIGNED NOT NULL,
partType TINYINT UNSIGNED NOT NULL,
partOrder TINYINT UNSIGNED NOT NULL,
FK(artID) => Article(id)
)
Так вот поле partType - это как раз тот самый objTypeID по которому мы понимаем Часть Статьи какого типа это:
//Общий предок Частей Статьи
Class ArticlePart {
const PART_TEXT; //Чисто текстовый блок
const PART_IMG_GALLERY; //Набор картинок в блоке
const PAT_POLL; //Блок с голосованием
....... //Получить объект нужного типа
static public & getPartObjByType($objType){
$objItem = false;
switch($objType){
case ...:
$objItem = ....;
break;
.... ......
}
}
}
//Классы самих Частей Статьи
Class ArticlePart_TEXT extends ArticlePart {
static const OBJ_TYPE = ArticlePart::PART_TEXT;
//У каждого вида Части Статьи свой способ оформления в БД,
//со своими таблицами и связями и пр.
public function DB_Save(){
.....
}
//Тут к примеру у каждого вида Части Статьи своя генерация HTML под него
public function getHTML(){
.....
}
}
И условно статью предполагается создавать из таких вот блоков разных типов. Они могут быть интерактивными, каждый из блоков, со своей связанной с пользователем информацией и пр.
А уже как у статьи в общем может быть там пагинация и прочая херня. Короче велосипед, но мой и хочу чтобы колёса сразу квадратными не выбирались :)