Как у меня есть архитектура плагинов в Ruby on Rails? - PullRequest
6 голосов
/ 09 октября 2009

Мне нужно создать сайт социальной сети на Ruby on Rails. Функции на сайте могут время от времени меняться; поэтому нам нужно будет легко добавлять / удалять функции. Более того, возможно, мы создаем еще один сайт социальной сети. По этим причинам мы планируем создать базовую платформу для сайтов социальных сетей в RoR с возможностью установки или удаления расширений для этой инфраструктуры.

Я раньше работал в Joomla! CMS и ее архитектура для добавления / удаления расширений - это то, на что я смотрю. В Joomla! При установке обычно есть сторона администратора, с которой вы можете добавлять / удалять / настраивать расширения.

Я новичок в RoR, и мне немного трудно решить, как это сделать. Любая помощь будет оценена.

Ответы [ 2 ]

15 голосов
/ 09 октября 2009

ОБНОВЛЕНИЕ 2015: ответ на этот вопрос в 2009 году сильно изменился

Плагины были заменены Gems и Engines Для получения всей необходимой информации о двигателях: http://guides.rubyonrails.org/engines.html

Двигатели - это фантастический способ создания инкапсулированного и многократно используемого кода для ваших приложений rails.

Оригинальный ответ для справки

Что касается разработки, то Rails Engines и / или плагины, вероятно, то, что вы ищете.

Rails Двигатели - это небольшие подмножества приложение, которое можно поместить в любое из ваших приложений на Rails и обрабатывать общие части приложения с нуля.

Скажем, например, в вашем приложении для социальных сетей есть вики, блог, чат и т. Д. Вы, скорее всего, захотите создать вики-движок, блог-движок и чат-движок.

Двигатели позволяют вам повторно использовать такую ​​функциональность в различных приложениях, поэтому вам не нужно повторяться.

Взгляните на: http://rails -engines.org /

Некоторая поддержка плагинов «engine» имеет был объединен с ядром Rails кодовая база в Rails 2.3.

Я бы также рекомендовал взглянуть на некоторые публичные проекты, например, на github, и посмотреть, как люди использовали движки.

Посмотрите на некоторые двигатели:

Другие полезные ссылки для чтения

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

Если вы хотите создать CMS, которая поддерживает какие-то расширения, такие как Wordpress или Joomla, тогда вам придется либо создать ее и предоставить руководящие указания, либо хотя бы посмотреть, как вы будете загружать / устанавливать модули / плагины с точки зрения пользователя. ,

Не уверен насчет безопасности этого

Redmine внедрил этот вид функциональности в свое удивительное приложение. Возможно, вы захотите покопаться в исходном коде для подсказок и подсказок

Наконец Adva_CMS в основном принял этот подход и создал несколько двигателей для своего приложения CMS

НТН

4 голосов
/ 27 декабря 2014

Двигатели по-прежнему довольно солидный путь, новое место для получения информации о них находится здесь: http://guides.rubyonrails.org/engines.html

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

Собираетесь ли вы представить свой интерфейс конечным пользователям? Сторонним разработчикам? Какие части приложения контролируются этими плагинами? Это просто уровень презентации? Влияет ли это на модель данных? Примите во внимание тот факт, что когда вы публикуете какой-либо внешний интерфейс, вы разрабатываете контракты, которые вам необходимо соблюдать.

Вы можете проверить эти шаблоны проектирования: http://en.wikipedia.org/wiki/Software_design_pattern. Они помогут вам понять, как управлять процессом разработки. Если вы просто работаете над плагинами для внутреннего использования, то какова их реальная цель? Чем они отличаются от модулей?

...