Como criar aplicativos da web completamente modulares [fechado]

34

Nos próximos meses, iniciaremos um projeto em que pegaremos um sistema que construímos para um cliente (v1) e o reconstruiremos do zero. Nosso objetivo com a v2 é torná-lo modular, para que esse cliente específico tenha seu próprio conjunto de módulos que eles usam, então outro cliente pode usar um conjunto diferente de módulos. O truque aqui é que a empresa A pode ter uma série de módulos de checkout e usuário que mudam a forma como esse sistema funciona. A empresa B pode seguir o procedimento padrão de pagamento, mas personalizar como os produtos são navegados.

Quais são algumas boas abordagens para a arquitetura de aplicativos quando você está construindo um aplicativo a partir do zero e deseja Corecompartilhar um que seja compartilhado entre todos os clientes, mantendo a flexibilidade para que qualquer coisa seja modificada especificamente para um cliente?

Eu vi os ganchos do CodeIgniter e não acho que seja uma boa solução, pois poderíamos ter 250 ganchos e ainda não é flexível o suficiente. Quais são algumas outras soluções? Idealmente, não precisaremos desenhar uma linha na areia.

Webnet
fonte

Respostas:

26

Para obter uma modularidade altamente organizada e dissociada, você pode seguir o padrão de arquitetura Hierarchical MVC , às vezes conhecido como controle de abstração da apresentação (embora eles não sejam estritamente o mesmo padrão). Kohana , Alloy , Fluency e FuelPHP suportam nativamente o HMVC * e a abordagem do Kohana HMVC é discutida em Scaling Web Applications with HMVC e Optimizing HMVC Web for Performance , por Sam de Freyssinet .

Infelizmente, o CodeIgniter não suporta HMVC nativamente. Criei minhas próprias bibliotecas para fornecer algum tipo de suporte a HMVC no CodeIgniter, inspirando- me no codeigniter-modular-extensions-hmvc da wiredesignz . Há uma introdução muito boa ao artigo do HMVC no nettus +, que discute o CodeIgniter e a extensão do wiredesignz. A seguinte imagem e citação são desse tutorial:

insira a descrição da imagem aqui

Cada tríade funciona independentemente uma da outra. Uma tríade pode solicitar acesso a outra tríade por meio de seus controladores. Ambos os pontos permitem que o aplicativo seja distribuído em vários locais, se necessário. Além disso, as camadas das tríades MVC permitem um desenvolvimento mais profundo e robusto de aplicativos. Isso leva a várias vantagens que nos levam ao próximo ponto.

Finalmente, você está no caminho certo com ganchos, mesmo se você adotar uma arquitetura HMVC, haverá alguns problemas que você ainda precisará resolver com ganchos, dependendo da sua implementação e do nível de automação que você está procurando . Um bom uso de ganchos seria um pre_controllergancho que garantiria a presença de todas as dependências dos módulos instalados, por exemplo.

* Pode haver outros que eu não conheça.

yannis
fonte
1
O ASP.NET MVC tem suporte para isso?
Robert Harvey
@RobertHarvey Eu não tenho nenhuma idéia ...
yannis
@ Robert Harvey Para mim, isso parece mais um padrão do que uma estrutura. Talvez esteja faltando alguma coisa, mas não consigo entender por que não posso fazer isso com herança no ASP.NET MVC.
Jeremy
3
@ Jeremy: Fica complicado nas visualizações, especialmente se você deseja reutilizar partes das visualizações. Parece intrigante, mas acho difícil visualizar no nível das porcas e parafusos.
Robert Harvey
No diagrama acima, parece que as visualizações de nível superior estão sendo compostas de visualizações menores localizadas mais abaixo na hierarquia. Isso já pode ser feito, em certa medida, comRenderAction()
Robert Harvey
5

Eu não sou um cara de PHP, mas no lado do java-script, se você tiver muitos módulos que gostaria de manter o mais independente possível, existem vários sistemas para isso, como o RequireJS , que possui java-script módulos que declaram dependências em outros módulos e a estrutura garante que eles sejam carregados quando necessário.

As várias estruturas lá fora variam em como as dependências são declaradas, quanta manipulação de dependência é feita como uma etapa de compilação no servidor, no carregamento da página ou dinamicamente mediante solicitação e em quanto você precisa alterar a maneira como escreve seu java- roteiro.

Essas estruturas não se aplicam tanto (ou talvez todas) se a estrutura do lado do servidor estiver lidando com isso ou gerando seu script java para você, mas você pode desejar que seu script java seja independente da estrutura do lado do servidor.

Se você não possui muito java-script, mas deseja alguma modularidade, sempre pode usar funções de chamada automática anônima que lidam com dependências, ordenando as tags de script com dependências primeiro e referenciando-se registrando-se com um único objeto em o espaço para nome global. Isso pelo menos os torna quase modulares e não custa muito para implementar.

psr
fonte
0

Aqui estão algumas instruções sobre como fazer o design modular: https://class.coursera.org/saas/lecture/preview/9

também isto: " SOA pode ser visto em um continuum, desde conceitos mais antigos de computação distribuída e programação modular , através de SOA, até práticas atuais de mashups, SaaS , ..."

A organização do código HMVC por si só não leva necessariamente à modularidade.

Goce Ribeski
fonte