Dictionaries (Cправочники или Словари)

Выкладываем свои наработки
Ответить

Behaviour Справочники нужен?

Нужен примерно такой, как описано в теме
7
88%
Не нужен
0
Голосов нет
Нужен, но совсем другой
1
13%
 
Всего голосов: 8

Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Dictionaries (Cправочники или Словари)

Сообщение Vasiliy Baukin »

Есть такая идея - сделать Behaviour "Dictionaries", типа расширенный EAV. Смысл в том, что, с одной стороны, мы можем позволить себе произвольные поля (сильный плюс подхода EAV), а с другой стороны - нормально контролируем доп. поля с помощью словарей.

Гибрид этих подходов дает мощь, которая нужда для всякого рода гибких каталогов. А это - почти каждый каталог, который заказывают на Yii :))

Предлагаю структуру БД:
entity_dict
id - id словаря
name - название
type - целочисленный идентификатор типа (можно типы зашить в модель). К примеру, сразу 3 типа приходят в голову:
1) Значения подаются выпадающим списком
2) Значения надо ввести
3) Комбинированный вариант
т.е. тут можно варианты работы со словарем задать. На деле - вариант можно динамически получить, бегло анализируя последующие таблицы, но в явном указании есть плюсы.

entity_option
id, dict_id, value - сюда складываем заранее заданные значения

entity_value
id, entity_id, dict_id, option_id, name, value
Эта таблица обеспечивает максимальную гибкость. Если есть только entity_id, value и name из entity_dict - это словарь без вариантов. Если есть entity_id, name и value - это EAV - зачем мусорить словарь, если это добавление "на раз"? (только в этом случае мы заполняем поле NAME в этой таблице). Если есть entity_id, dict_id и этот словарь включает опции, то в value включается Id опции из таблицы entity_option. Если вариантов несколько (мультивыбор или мультизначение) - для каждого выбранного создается отдельная строка.

Итого: схема гибкая, можно потюнинговать под производительность.

Имхо, оформив поведением и коллективно поработав над Экстенженом, можно значительно сократить время разработки некоторых проектов.

Для начала давайте определимся - стоит ли заниматься? Или это только мне одному надо? Может быть у кого-то есть наработки/идеи на эту тему?

Если есть интерес - предлагаю обсуждать архитектуру Экстенжена в этой теме.
snowflake
Сообщения: 24
Зарегистрирован: 2010.05.14, 12:15

Re: Dictionaries (Cправочники или Словари)

Сообщение snowflake »

Если я правильно понял идею (не совсем понял почему именно поведение, но возможно потому что их толком не использовал), расширение очень нужное, если его правильно "расширить" и реализовать. Как указал автор поста - почти все каталоги гибридные. Сам очень часто сталкиваюсь с необходимостью реализации подобных "гибридов".
В основном проблема в потребности реализовывать много интерфейсных формочек для манипуляции с подобными словарями. Сейчас это делаем на js получается быстрее.
На что стоит обратить внимание:
1. Для entity_dict зачастую нужно автоматом уметь подтягивать автокомпилита, так как списки на большом словаре - плохо.
2. Нужно уметь разносить отдельные entity_value по разным таблицам БД для разных entity_option, так как снова при больших словарях тормозить будет.

И уж если делать расширение то его соль должна быть в том что бы каким-то способом задав хранилища, можно было сгенерить нормально все crud'ы. Потому как если это все будет только на модельном уровне - это ничего по сути не дает, подобная модель реализовывается очень быстро (даже с разложением по разным таблицам), а вот реализовать все crud'ы для большого количества словарей - это можно сидеть и формочки делать несколько дней, уже имея модель.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Dictionaries (Cправочники или Словари)

Сообщение Ekstazi »

У меня была наработка в этом направлении. Где-то выкладывал на форуме.
Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Re: Dictionaries (Cправочники или Словари)

Сообщение Vasiliy Baukin »

Ekstazi, какими хоть ключевыми словами искать? Или хотя бы в каком разделе выкладывал?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Dictionaries (Cправочники или Словари)

Сообщение Ekstazi »

Выкладываю свою наработку в плане eav - полная эмуляция запросов как к обычной таблице. Дальше не хватило сил продолжить.
Вложения
eav.rar
(8.57 КБ) 261 скачивание
Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Re: Dictionaries (Cправочники или Словари)

Сообщение Vasiliy Baukin »

Я общался с creocoder, он сказал, что сейчас разрабатывает подобный Extension, где будет полноценная манипуляция таблицей через ALTER. Соответственно до выхода детища creocoder, думаю, смысла нет продолжать - вполне возможно, что его MCK (Model Construction Kit, как я понял из разговора) + EAV вполне должно хватить для покрытия 90+ процентов потребностей.

Как я понял, Extension должен выйти в этом месяце.

Так что ждем.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Dictionaries (Cправочники или Словари)

Сообщение Ekstazi »

Хотелось бы глянуть. Ждем скринов и кода.
Ответить