[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

26) Desenvolvendo aplicações com MultiApplicationManager  XML
Forum Index -> F.A.Q.
Author Message
IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Imagine um projeto de médio ou grande porte, é sabido que a cada passo do desenvolvimento da aplicação temos que adicionar novos comandos e configurações que cada "módulo" do sistema exige, filtros, action, outputs, etc. Agora imagine este projeto crescendo e você tendo que modificá-los, até mesmo adicionar novos comandos em uma aplicação, isso poderia te causar "transtornos" futuros com relação a manutenção, correto?

Ao detectar que essas aplicações poderiam se tornar um problema para os desenvolvedores, um dos desenvolvedores oficiais do Mentawai (Velo) desenvolveu uma forma de se modularizar o ApplicationManager através do chamado MultiApplicationManager, que foi implementada a partir da Versão 1.9.

Como funciona o MultiApplicationManager?
"A classe MultiApplicationManager é abstrata e extende org.mentawai.core.ApplicationManager, ela é responsável por fragmentar os arquivos de configuração de forma rápida e transparente, através do registerManagers." Velo

Então na prática é o mesmo que eu dividir meu ApplicationManager em vários "mini" ApplicationManages?
Correto.

Devo utilizar o MultiAplicationManager em todas as minhas aplicações ?
Depende. Há prós e contras em se modularizar o AplicationManager, mas podemos destacar que um programa modular é muito mais fácil e rápido de ser mantido. Lembre-se: "não faça bem feito o que não é pra ser feito". Em resumo, se eu tenho um sistema pequeno e simples, há a necessidade de se modularizar?

O meu AplicationManager deixa de existir ?
Não. É nele que você vai registrar seus "mini" AplicationManagers. Eu aconselho a criar um "ConfigManager" e nele você colocar todas as configurações globais que terão no sistema, até porque são filtros globais, e deixar os MeusModulosManager para suas configurações como: actions, (LoadActions), listas (LoadLists) etc.

Onde ficam MeusModulosManager?
Onde você achar que os mesmos devem ficar, na raiz ou em um pacote, isto, você ou o escopo do projeto decide. Por exemplo, você pode deixar o AplicationManager na raiz (classes) e criar um pacote manager, managers, whatever e colocar todos os MeusModulosManager lá.

Veja como ficaria um ApplicationManager
Code:
public class ApplicationManager extends MultiApplicationManager {
 
 	public void registerManagers() {
 
 	 	//O ConfigManager será o responsável pelas configurações globais.
 		register(ConfigManager.class); 
 
 		//O UsuarioManager será o responsável pelas configurações do módulo usuario.
 	 	register(UsuarioManager.class); 
 		...
 	}
 
 }


Repare que o ApplicationManager extende MultiApplicationManager, e com isto ele deixa de ser um "configurador" e se torna um "agregador" de AplicationManagers, sua função será apenas de "agregar" as diversas configurações divididas em uma só.

O ConfigManager, será o responsável pelas configurações globais.
Code:
public class ConfigManager extends org.mentawai.core.ApplicationManager {
     public void init(Context application) {     
      /**
       * Aqui colocaremos todas as configurações que sejam comuns a todos como:
       * ioc, conexões ao banco de dados, grupos etc.
       *
       **/     
     }
 
     public void loadLists() throws IOException {
      /**
       * Configure aqui suas listas, comum a todos.
       **/     
     }
 
     public void loadActions() {
 	// GLOBAL FILTERS 
             // GLOBAL CONSEQUENCES
     }
 
 }

Você também poderá configurar os loadLocales, loadFormatters que também são globais.

O UsuarioManager, será o responsável pelas configurações do "módulo" usuário.
Code:
public class UsuarioManager extends org.mentawai.core.ApplicationManager {
 
     public void loadActions() {
      /**
       * Todas as actions que pertencem ao "módulo" Usuário
       *
       **/     
     }
 
     public void loadLists() throws IOException {
      /**
       * Configure aqui suas listas, que têm referencias ao módulo.
       * Sexo, por exemplo.
       *
       **/     	
     }
 
 }

O mesmo vai servir pra todos os outros managers que possuir, ou seja, loadActions e loadLists especificos por módulo.

Como dito anteriormente, a grande vantagem desta forma de configuração programática é que fica extremamente fácil sua manutenção, pois todas as actions ou listas relativas a USUARIO estão no módulo UsuarioManager.

Lembre-se que essa é apenas mais uma das formas de se desenvolver usando o mentawai. Essa é a grande vantagem do mentawai em relação a outros frameworks. Com o mentawai é sempre SET OPTIONAL ON.

Bom dúvidas ou sugestões, Utilizem o Forum.

Abraço a todos.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
velo


[Avatar]

Joined: 16/02/2006 13:33:54
Messages: 1197
Location: Jaraguá do Sul - SC
Offline

A FAQ ficou um tesão veio!!!

Apenas um extra, a classe de configuração pode ser uma InnerClass do appManager. Não deixei a opção de sobreescrever os metodos loadActions, load... para não haver risco de alguem esquecer de chamar o super. Logo todos esses método são final no MultiAppManager.

VELO

_____________________________________
Mentawai Developer
"When the only tool you have is a hammer, everything looks like a nail"
http://en.wikipedia.org/wiki/Golden_hammer
[Email] [MSN]
Stanley Alves



Joined: 09/08/2007 12:00:42
Messages: 60
Offline

seria bom ter um exemplificação em forma de projeto. na teoria é tudo legal... mas na pratica só tristeza...

flw...

p.s: tipo um projeto pronto... para temos uma visão funcional da coisa... mostrando os beneficios que a divisão modular traria a um projeto de grande dimensão.

flw de novo...
velo


[Avatar]

Joined: 16/02/2006 13:33:54
Messages: 1197
Location: Jaraguá do Sul - SC
Offline

Comente a frase:

Stanley Alves wrote:
na teoria é tudo legal... mas na pratica só tristeza...
 


O que aconteceu?


VELO

_____________________________________
Mentawai Developer
"When the only tool you have is a hammer, everything looks like a nail"
http://en.wikipedia.org/wiki/Golden_hammer
[Email] [MSN]
Stanley Alves



Joined: 09/08/2007 12:00:42
Messages: 60
Offline

não blz... pensava que com isso iria resolver meu problema... mas não era bem o que eu tava imaginando... o termo modularizar encontrado em alguns post's me confundiu bastante... agora já entendi o que ele faz...

flw...
vonlinkerstain



Joined: 10/02/2009 18:40:08
Messages: 4
Offline

Opa, tudo bem?
Pergunta: Esta classe é mais uma forma organizacional das actions e lists, pra facilitar a manutencao do código, pra nao termos um método gigante. Todas as actions e lists ficam disponíveis pra toda a app, correto?

velo


[Avatar]

Joined: 16/02/2006 13:33:54
Messages: 1197
Location: Jaraguá do Sul - SC
Offline

Exato

_____________________________________
Mentawai Developer
"When the only tool you have is a hammer, everything looks like a nail"
http://en.wikipedia.org/wiki/Golden_hammer
[Email] [MSN]
crocetti



Joined: 25/06/2009 11:42:55
Messages: 3
Offline

Olá!
Como eu faria para registrar dinamicamente minhas classes em cada módulo ( uso Hibernate Annotation )?

Eu crio a SessionFactory em um ConfigManager e tenho que usar o addAnnotatedClass nas QualquerCoisaManager.

alguem tem uma idéia?
 
Forum Index -> F.A.Q.
Go to:   
Powered by JForum 2.1.6 © JForum Team