Como eu tenho arquitetura de plug -in em Ruby on Rails?
Pergunta
Eu tenho que construir um site de redes sociais no Ruby on Rails. Os recursos no site podem mudar de tempos em tempos; Portanto, precisaremos adicionar/remover os recursos com facilidade. Além disso, podemos estar construindo outro site de redes sociais. Por esses motivos, estamos pensando em criar uma estrutura básica para sites de redes sociais no ROR com o recurso para instalar ou desinstalar extensões na estrutura.
Eu trabalhei anteriormente em Joomla! O CMS e sua arquitetura para adicionar/remover extensões são o que estou olhando. Em um Joomla! Instalação geralmente existe um lado do administrador do qual você pode adicionar/remover/personalizar extensões.
Eu sou novo em ror e achar pouco difícil decidir como fazer isso. Qualquer ajuda será apreciada.
Solução
ATUALIZAÇÃO 2015: Isso foi respondido em 2009, muito mudou
Os plug-ins foram substituídos por gemas e motores para todas as informações necessárias nos motores:http://guides.rubyonrails.org/engines.html
Os motores são uma maneira fantástica de criar código encapsulado e reutilizável para os aplicativos do seu Rails.
Resposta original para referência
Nos motores e/ou plugins do lado do lateral de desenvolvimento, é provavelmente o que você está procurando.
Digamos, por exemplo, seu aplicativo de rede social tem um wiki, blog, sala de bate -papo etc. Você provavelmente gostaria de criar um mecanismo wiki, mecanismo de blog e mecanismo de sala de bate -papo.
Os motores permitem que você reutilize essa funcionalidade em diferentes aplicativos para que você não precise se repetir.
Dê uma olhada em: http://rails-engines.org/
Eu também recomendaria dar uma olhada em alguns projetos públicos no Github e ver como as pessoas usavam motores.
Dê uma olhada em alguns motores:
Outros links úteis para leitura
Em termos de funcionalidade, você ainda pode ter uma área de administrador que poderia ativar certos recursos, ie. Seu blog ou wiki, permitindo que os usuários tenham acesso a essas áreas com um sistema de permissões/funções.
Se você deseja criar um CMS que suporta algum tipo de extensão, como no WordPress ou Joomla, terá que construí -lo e fornecer diretrizes ou, pelo menos, analisar como você carregaria/instalaria motores/plugins da perspectiva do usuário.
Não tenho certeza das implicações de segurança disso
Redmine colocou esse tipo de funcionalidade em sua incrível aplicação. Você pode querer cavar o Código fonte Para dicas e pistas
Finalmente ADVA_CMS basicamente adotou essa abordagem e criou vários motores para o aplicativo CMS
Hth
Outras dicas
Os motores ainda são um caminho a seguir, o novo local para obter informações sobre eles está localizado aqui: http://guides.rubyonrails.org/engines.html
Mas o que você precisa é realmente mais específico do aplicativo. Muitas aplicações desenvolvem essas coisas organicamente ao longo do tempo. Eles começam por criar alguns deles e, em seguida, re-fator-os periodicamente até encontrarem padrões que se alinham aos padrões de design de software e, em seguida, desenvolvem uma estrutura de plug-in.
Você vai expor sua interface aos usuários finais? Para desenvolvedores de terceiros? Quais partes do aplicativo são controladas por esses plugins? É apenas o nível de apresentação? Isso afeta o modelo de dados? Considere o fato de que, quando você publicar qualquer tipo de interface externa, está desenvolvendo contratos que precisa honrar.
Você pode conferir estes padrões de design: http://en.wikipedia.org/wiki/software_design_pattern. Eles o ajudarão a descobrir como gerenciar seu processo de desenvolvimento. Se você está apenas trabalhando em plugins para uso interno, qual é o objetivo real deles? O que os torna diferentes dos módulos?