Quais são os melhores recursos se você quisesse criar um aplicativo com modularização? [fechadas]
-
03-07-2019 - |
Pergunta
Na minha análise das plataformas web / aplicações mais recentes, tais como Drupal, Wordpress, e Salesforce, muitos deles criar seu software baseado no conceito de modularização: Onde os desenvolvedores podem criar novas extensões e aplicativos sem a necessidade de código de mudança na o sistema de "core" mantido pelos desenvolvedores de chumbo. Em particular, eu sei Drupal usa um sistema de "gancho", mas eu não sei muito sobre o motor ou projetar que implementa-lo.
Se você tivesse que ir por um caminho de criar um aplicativo e você queria um sistema que permitiu a modularização, por onde começar? É este um padrão particular projeto que todo mundo sabe sobre? Existe uma manual que esse paradigma tende a subscrever? São seus qualquer sites que debatem este tipo de desenvolvimento a partir do solo-up?
Eu sei que algumas pessoas apontam diretamente para OOP, mas isso não parece ser a mesma coisa, completamente diferente.
Este sistema particular Estou planejando se inclina mais para algo como Salesforce, mas não é um sistema de CRM.
Por uma questão de questão, por favor ignorar o argumento Buy vs. Desenvolver , como essa consideração já nas obras é. Agora, eu estou pesquisando o aspecto de construção.
Solução
Existem duas maneiras de ir por aqui, qual tomar depende de como será o seu comportam software.
Uma maneira é a plug-in rota , onde as pessoas podem instalar novo código na aplicação modificar os aspectos relevantes . Este percurso exige a sua aplicação é instalável e não só oferecido como um serviço (ou outra coisa que você instalar e revisão de código enviada por terceiros, um pesadelo).
A outra maneira é oferecer uma API , o que pode ser chamado pelas partes relevantes e fazer o controle de transferência de aplicação ao código localizado em outro lugar (a la Facebook Apps) ou fazer a aplicação para fazer como os comandos API permitir que o desenvolvedor (a la Google Maps).
Mesmo que os mecanismos variam e como realmente implementá-las diferentes, você tem que, em qualquer caso, definir
- Que liberdade vou deixar que os usuários têm?
- Que serviços que oferecem para os programadores a personalizar o aplicativo?
e a coisa mais importante:
- Como habilitar esse no meu código, mantendo-se seguro e robusto. Isso geralmente é feito por sandboxing o código, validar entradas e potencialmente oferecendo capacidades limitadas para os usuários.
Neste contexto, ganchos são predefinidos lugares do código que chamar todas as funções gancho dos plugins registrados, se definido, modificar o comportamento padrão do aplicativo. Por exemplo, se você tem uma função que torna um fundo você pode ter
function renderBackground() {
foreach (Plugin p in getRegisteredPlugins()) {
if (p.rendersBackground) p.renderBackground();
}
//Standard background code if nothing got executed (or it still runs,
//according to needs)
}
Neste caso, você tem o gancho 'renderBackground' que plugins pode implementar para mudar o fundo.
De forma API, a aplicação do usuário chamaria seu serviço para obter o fundo prestados
//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you
Isso tudo é também relacionada com a Hollywood princípio, que é uma coisa boa para aplicar , mas às vezes não é apenas prática.
Outras dicas
O Plugin padrão de P da EAA é provavelmente o que você está depois. Criar uma interface pública para o seu serviço ao qual plugins (módulos) pode integrar a ad-hoc em tempo de execução.
Isso é chamado de arquitetura de componentes. É realmente uma grande área, mas algumas das coisas importantes chave aqui são:
- composição de componentes (componentes de contentores pode conter qualquer outro componente)
- , por exemplo, uma grade deve ser capaz de conter outras grades, ou quaisquer outros componentes
- Programação de interface (componentes são interagiu com através de interfaces conhecidas)
- por exemplo, um sistema de visão que pode pedir um componente para tornar-se (dizer em HTML, ou pode ser passada uma área de render e pedir o fim de desenhar nele diretamente
- uso extensivo de registros dinâmicos (quando um plug-in é carregado, ele se registra com os registros apropriados)
- um sistema para a passagem de eventos de componentes (como cliques do mouse, cursor entrar etc)
- uma notificação
- gerenciamento de usuários
e muito mais!
Se você está hospedando o aplicativo, publicar (e dogfood) uma API RESTful.
Se você está distribuindo software, olhada OSGi .
Aqui está um pequeno vídeo que pelo menos lhe dará algumas dicas; o Lego Processo [menos de 2 minutos de duração]
Há também uma receita completa de como criar sua própria estrutura baseada extensivamente sobre Modularization ...
O elemento mais importante chave para tornar o software modularizado é lembrar que é puramente [a maioria] uma questão de como baixo acoplamento você pode criar seus sistemas. Quanto mais fracamente acoplada, o que é mais fácil modularize ...