Есть приложение на Rails 3.0.9, точнее оно еще не есть, но
разрабатывается. Мне необходимо внести туда следующий функционал:
Допустим имеется некоторая модель Product, которая представляет собой
описание какого-нибудь товара. Для этой модели необходимо реализовать
постовое представление. Все данные, которые относятся к постовому
представлению(meta_keyword, meta_description, page_title) хранятся в
другой таблице postable_attrs (PostableAttr model). Также, необходимо,
чтобы продукты могли комментироваться. Для этого я реализую модель
Comment и CommentableSettings для хранения max_nested_comment_level, и
comments_counter. Далее мне хочется добавить, например рейтенги,
возможность использования каждым продуктом своих уникальных атрибутов
из Attribute и т.д. Все это просто, но проблема состоит в том, чтобы
пользователю не нужно было добавлять в модели ассоциации. Я себе
представляю это так:
В каждой модели имеется некий метод super_duper, который занимается
организацией ассоциаций, сами же ассоциации хранятся в некоторой
даблице в бд или в yaml-конфигурациях и имеют вид:
assoc_type:string#has_many, has_one и т.д.
assoc_model:string#post_attr, comments, users и т.д.
assoc_...
в общем конфигурация должна хранить типы ассоциаций и столбцы со всеми
возможными сввойствами для них. Далее super_duper получает все
записи,что принадлежат данной модели, компонирует их содержимое и
выполняет class_eval. Все это кажется мне очень некрасивым решением.
Возможно вы подскажете как следует правильно организовать подобное
подключение плагинов к моделям, вьюхам и контроллерам.
Для вьюх и контроллеров я заприметил cells и apotomo, но опять-таки
нужно будет реализовать очереди. Что я подразумеваю под очередями.
Дапустим имеется макет состоящий из header, content, rightbar и
bottom. В каждую часть макета нужно будет вставить некоторые
виджеты(cells например), но их вставлять необходимо не в ручную, а в
определенном упорядке, для этого нужно организовать очереди типа
rightbar_widges, которые опять будут представлены в виде yaml или
таблицы БД и будут содержать место виджета в очереди и имя очереди.
Далее в макете я использую волшебный метод insert_right_bar_widgets
(предопределенный или обрабатываемый в method_missing), который в
заданном порядке вставляет виджеты в страницу.
Вобщем все это только мои предположения о том, как что должно
выглядеть, хочется услышать мнение опытных разработчиков по поводу
того, как бы они организовали это все, а также по поводу того, как
правильно хранить конфигурацию моделей, виджетов и т.д. Лично мне
кажется, что следует по максимуму использовать yaml формат и для
работы с ним какой-нить ActiveYaml или что-то такое. Как организовать
кеширование данных конфигурации, чтобы не приходилось грузить yaml -
файл настроек при каждом запросе пользователя?
Как вы относитесь к хранению конфигурации в *.rb файлах. в которых
хранится хэш конфигурации, считывать их и выполнять через eval? Лично
мне привили боязнь к eval-методам, я стараюсь их избегать. Спасибо за
помощь!
p.s. То, что я описал - мое представление о том, как должны работать
плагины, должно быть имеется более разумное решение, позволяющее
реализовать расширяемую, настраиваемую, систему с использованием
плагинов без необходимости конечными пользователями делать какие-либо
манипуляции в исходниках. Знате как - поделитесь пожалуйста опытом.
--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
Комментариев нет:
Отправить комментарий