Quais são os melhores recursos se você quisesse criar um aplicativo com modularização? [fechadas]

StackOverflow https://stackoverflow.com/questions/413247

  •  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.

Foi útil?

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 ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top