The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Какой верный путь для получения экземпляро объектов по их типу?"
Отправлено Вервер, 15-Фев-23 19:57 
> Фабричный метод с маппингом - подход имеющий право на жизнь. Вопрос в
> том, для чего это применять.
> Очевидно, что у вас есть некая универсальная форма, которая посылает ид типа
> создаваемого документа. И дальше вы создаете документ исходя из его ид.
> И в базу потом пишете с тем же самым ид.
> Вместо этого можно для каждого типа документа сделать свои формы, тип создаваемого
> документа разруливать по маршруту обработчика, ид для базы держать в константе
> класса и работать с ним только при записи в базу -
> то есть, в контроллере вообще никогда.

Не хотел в нудные подробности углубляться, но если это поможет пониманию и оконкретит что главное как лучше это реализовать, то вот, опишу более полно и близко к оригиналу:

Есть такая сущность, как Статья. Это сущность из которой будет формироваться условно страница с самой этой Статьёй:


//Отображение её в БД
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(){
        .....
    }
}

И условно статью предполагается создавать из таких вот блоков разных типов. Они могут быть интерактивными, каждый из блоков, со своей связанной с пользователем информацией и пр.
А уже как у статьи в общем может быть там пагинация и прочая херня. Короче велосипед, но мой и хочу чтобы колёса сразу квадратными не выбирались :)

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, [email protected] (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру