Modelagem sistema com Modulos

88 views
Skip to first unread message

Rene Felix Correa

unread,
May 23, 2012, 7:36:25 AM5/23/12
to dotnetar...@googlegroups.com
Bom dia pessoal,

Gostaria de saber se alguem tem um exemplo, ou uma dica para a arquitetura de um sistema Web que será separado por modulos, por exemplo, tenho modulos de RH que alguns usuarios tem acesso outro de compras que apenas outros usuarios tem acesso, ai pensando não sei se vale a pena criar tudo em camadas e cada modulo seria uma aplicação ou crio camadas normalmente e junto tudo em uma aplicação só.


Não sei se consegui ser claro. Gostaria apenas algumas dicas para criação de um sistema assim.


--
Rene Felix Correa
Analista Desenvolvedor
http://renefc3.wordpress.com

Winston Pacheco Junior

unread,
May 23, 2012, 7:45:38 AM5/23/12
to dotnetar...@googlegroups.com
Cara, talvez seu sistema seja complicado o suficiente para que você use DDD, você poderia ler sobre isso. O livro de Evans é legal, prático e divertido o suficiente para você ler em dois tempos.
Pra quem não conhece o domínio da aplicação fica difícil dizer os "modulos" que você precisa. Mas acho que o DDD vai te ajudar.

--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com
Para mais opções visite o grupo em http://groups.google.com/group/dotnetarchitects?hl=pt-br

Hugo Estevam

unread,
May 23, 2012, 8:27:48 AM5/23/12
to dotnetar...@googlegroups.com
Rene,
 
Ja precisei fazer algo semelhante e naquele momento escolhi usar .NET 4.0, ASP.NET MVC 3 e Plug-in Architecture com Razor Precompiled Views. Esse ultimo permite que você criei modulos independentes e carregue no seu portal. No meu caso ainda utilizei IoC para injetar os Controllers dos modulos secundários no portal principal e ORM (NHibernate) para persistencia de dados.
 
Aqui segue um link que explica como utilizar o ASP.NET MVC e Embedded Views:
 
Um abraço,
Hugo Estevam

Edegilson S. Silva

unread,
May 23, 2012, 8:49:42 AM5/23/12
to dotnetar...@googlegroups.com
Talvez seja interessante o recurso de Areas do ASP.NET MVC..


[]'s

--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com
Para mais opções visite o grupo em http://groups.google.com/group/dotnetarchitects?hl=pt-br



--
Edegilson S. Silva
Desenvolvedor de Sistemas.

Denis Ferrari

unread,
May 23, 2012, 9:16:19 AM5/23/12
to dotnetar...@googlegroups.com
Hugo,

Muito bacana esse artigo que você indicou.

Você também tratou os schemas (DB) dos módulos como plugins? 

Abraços!

Denis Ferrari 
www.heroisdati.com



Em 23 de maio de 2012 09:27, Hugo Estevam <hugoes...@gmail.com> escreveu:

Hugo Estevam

unread,
May 23, 2012, 9:52:52 AM5/23/12
to dotnetar...@googlegroups.com
Denis,
 
Sim, cada módulo tinha um schema (DB) específico. Aconteceu de ter que criar um modulo que centralizava algumas informações que são utilizadas em outros módulos (uma espécie de Domain Core), para reaproveitamento, essas informações eram acessadas via Service Facade.
 
Um Abraço,
Hugo Estevam

Em quarta-feira, 23 de maio de 2012 10h16min19s UTC-3, Denis Ferrari escreveu:
Hugo,

Muito bacana esse artigo que você indicou.

Você também tratou os schemas (DB) dos módulos como plugins? 

Abraços!

Denis Ferrari 
www.heroisdati.com



Em 23 de maio de 2012 09:27, Hugo Estevam <hugoes...@gmail.com> escreveu:
Rene,
 
Ja precisei fazer algo semelhante e naquele momento escolhi usar .NET 4.0, ASP.NET MVC 3 e Plug-in Architecture com Razor Precompiled Views. Esse ultimo permite que você criei modulos independentes e carregue no seu portal. No meu caso ainda utilizei IoC para injetar os Controllers dos modulos secundários no portal principal e ORM (NHibernate) para persistencia de dados.
 
Aqui segue um link que explica como utilizar o ASP.NET MVC e Embedded Views:
 
Um abraço,
Hugo Estevam

Em quarta-feira, 23 de maio de 2012 08h36min25s UTC-3, Rene Felix escreveu:
Bom dia pessoal,

Gostaria de saber se alguem tem um exemplo, ou uma dica para a arquitetura de um sistema Web que será separado por modulos, por exemplo, tenho modulos de RH que alguns usuarios tem acesso outro de compras que apenas outros usuarios tem acesso, ai pensando não sei se vale a pena criar tudo em camadas e cada modulo seria uma aplicação ou crio camadas normalmente e junto tudo em uma aplicação só.


Não sei se consegui ser claro. Gostaria apenas algumas dicas para criação de um sistema assim.


--
Rene Felix Correa
Analista Desenvolvedor
http://renefc3.wordpress.com

--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetarchitects@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitects+unsubscribe@googlegroups.com

Felipe Santos

unread,
May 23, 2012, 8:37:12 AM5/23/12
to .Net Architects
Se utilizar projetos separados, seria interessante que você criasse um
projeto de autenticação para transitar entre os modulos.
Caso utilize camadas separadas na mesma solution, então a mesma sessão
pode ser compartilhada, lembrando que daria mais trabalho em uma
possível atualização ou implementação de novos modulos

On 23 maio, 09:27, Hugo Estevam <hugoesteva...@gmail.com> wrote:
> Rene,
>
> Ja precisei fazer algo semelhante e naquele momento escolhi usar .NET 4.0,
> ASP.NET MVC 3 e Plug-in Architecture com Razor Precompiled Views. Esse
> ultimo permite que você criei modulos independentes e carregue no seu
> portal. No meu caso ainda utilizei IoC para injetar os Controllers dos
> modulos secundários no portal principal e ORM (NHibernate) para
> persistencia de dados.
>
> Aqui segue um link que explica como utilizar o ASP.NET MVC e Embedded Views:http://www.codeproject.com/Articles/358360/NET-4-0-ASP-NET-MVC-3-plug...

Igor

unread,
May 23, 2012, 1:57:50 PM5/23/12
to dotnetar...@googlegroups.com
Adorei esse lance de plug in, irei testa-lo

Marcos David Prosdoskimis

unread,
May 23, 2012, 2:11:49 PM5/23/12
to Grupo de Discussão
Achei bem interessante também...
 
vou testar também...
 

Date: Wed, 23 May 2012 10:57:50 -0700
From: oro...@gmail.com
To: dotnetar...@googlegroups.com
Subject: [dotnetarchitects] Re: Modelagem sistema com Modulos


Adorei esse lance de plug in, irei testa-lo

--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com

Diego Dias

unread,
May 23, 2012, 2:47:06 PM5/23/12
to dotnetar...@googlegroups.com
Se você trabalhar com alguma mecanismo de permissão por grupo não tornaria tudo mais simples? Por exemplo:  http://msdn.microsoft.com/pt-br/library/system.web.security.roleprovider.aspx 

[]'s

2012/5/23 Marcos David Prosdoskimis <marcos...@hotmail.com.br>



--

Diego Dias
Analista Desenvolvedor
Microsoft Certified Applications Developer
Microsoft Certified Technology Specialist WCF .Net 4.0 -
Charter Member
11-8931.1768


Denis Ferrari

unread,
May 23, 2012, 5:03:49 PM5/23/12
to dotnetar...@googlegroups.com
Hugo,

Forçando um pouco mais o cenário: Você está trabalhando com multitenant? 

A sua persistência carrega os mapeamentos de acordo com os plugins disponibilizados naquele ambiente/cliente dinamicamente? 

Resolvi a pouco tempo uma situação parecida, por isso a curiosidade. :)

Abraços!

Denis Ferrari 
www.heroisdati.com



Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com

Rene Felix Correa

unread,
May 23, 2012, 7:35:04 PM5/23/12
to dotnetar...@googlegroups.com
Hugo,

Nao estou utilizando  multitenant  nao.
Quando voce diz mapeamento, seria os mapeamentos dos objetos relacionais com o BD  ?  É que nao entendi carregar os mapeamentos 

2012/5/23 Denis Ferrari <denis....@gmail.com>

Denis Ferrari

unread,
May 23, 2012, 8:10:52 PM5/23/12
to dotnetar...@googlegroups.com
Desculpa Rene, você se confundiu, perguntei ao Hugo sobre a solução dele. :)

Abraços!

Denis Ferrari 
www.heroisdati.com

Eric Lemes

unread,
May 24, 2012, 7:17:09 AM5/24/12
to dotnetar...@googlegroups.com
Rene,

Achei muito oportuna sua pergunta. Acho uma boa oportunidade para discutir arquitetura.

Antes de discutir quais tecnologias usar, gostaria de discutir um pouco o conceito de módulos que vc está trabalhando. Vc citou módulos de RH e compras para sua aplicação.

Vejo dois grandes caminhos a se seguirem aqui:

1) Criar uma única aplicação com um schema de banco de dados (ou outro repositório) compartilhado para e todas as aplicações em cima do mesmo "framework". A partir daí criar um módulo ou outro mecanismo de autorização de forma que somente determinados usuários vejam determinadas funcionalidades. Quase todo mundo vai por aqui. Mesmo que vc crie separações por plugins, ou coisas do tipo, vai fazer com que todas as aplicações compartilhem o mesmo framework. No caso de evoluções do framework (subida de versão, mudança técnica, etc) vc vai forçar todo mundo a subir simultaneamente, o que pode ter seus prós e seus contras também.

2) Criar as aplicações de forma 100% isoladas e conversando através delas por um mecanismo de integração (mensageria por exemplo). Desta forma, a complexidade de troca de eventos entre estas aplicações seria maior, a complexidade de integração maior e implicações de desempenho maiores, porém, vc teria um desacoplamento "total" dos seus "módulos.

A partir das experiências profissionais que venho tendo, tenho visto o cenário 2 com ótimos olhos. Quanto maior a empresa, mais heterogêneos são os sistemas/plataformas utilizados e mais difícil é implementar um ser "estranho" dentro desse ecossistema. Com certeza, exercitando uma visão futura, vc terá clientes que usaram somente compras, ou somente RH e vc terá que integrar com o sistema financeiro delas, com o sistema de estoque delas. Mesmo que seja uma aplicação interna, no futuro, implementando um novo sistema de RH ou compras, vc teria um trabalho enorme para isolar funcionalmente sua aplicação. Uma vez que já tenha uma aplicação orientada a serviços (independente de qual plataforma técnica utilizará para isso), poderá ter um custo de implementação menor desta ferramenta em outros clientes.

Um caso muito simples onde isso já se aplica: praticamente toda aplicação tem um módulo de autorização de usuários, ou seja, quem pode fazer o que na aplicação. Se um funcionário é demitido ou troca de área, dezenas de sistemas precisam ser alterados, manualmente, um a um. Se invés de desenvolver um módulo de autorização em todas as aplicações, desenvolver um único e todas as aplicações receberem eventos de adicionar/remover permissões deste módulo, este problema é resolvido. Tem grandes empresas pagando fortunas pra implementar isso em seus legados.



Abraço,

Eric




2012/5/23 Rene Felix Correa <ren...@gmail.com>

Hugo Estevam

unread,
May 24, 2012, 8:33:50 AM5/24/12
to dotnetar...@googlegroups.com
Denis,
 
No projeto que mencionei o cenário era de Arquitetura Multi-Tenant.
 
Quanto ao mapeamento, cada módulo possuia seus mapeamentos específicos, então no momento que o modulo era carregado, eram registrados os mapeamentos existentes naquele módulo (foi utilizado o FluentNHibernate para o mapeamento).
 
Um abraço,
Hugo Estevam

Hugo Estevam

unread,
May 24, 2012, 8:44:04 AM5/24/12
to dotnetar...@googlegroups.com
Eric,
 
Estou de acordo com a sua predileção pelo cenário 2. Ele parte da velha máxima, "O que é fácil de fazer é difícil de manter."
 
Um abraço
Hugo Estevam
Para postar envie uma mensagem para dotnetarchitects@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitects+unsubscribe@googlegroups.com
Reply all
Reply to author
Forward
0 new messages