Catálogo central de todas as factories de modelos do projeto. Toda action chama getFactory() e recebe esta classe — a partir daí acessa qualquer módulo: getFactory().departamento(), getFactory().laboratorio(), etc. Sem o método departamento() adicionado aqui, nenhuma action do módulo consegue chegar aos seus dados.
package br.xt;
import br.jasap.core.AppManager;
import br.xt.app.contatos.ContatosMdFactory;
import br.xt.app.ged.GedMdFactory;
import br.xt.app.laboratorio.LaboratorioMdFactory;
import br.xt.app.departamento.DepartamentoMdFactory;
import br.xt.app.painel.PainelMdFactory;
public class AppsRootModelFactory {
protected AppManager manager = null;
public AppManager getManager() {
return manager;
}
public void setManager(AppManager manager) {
this.manager = manager;
}
public AppsRootModelFactory() {
}
public AppsRootModelFactory(AppManager manager) {
setManager(manager);
}
public ContatosMdFactory contatos() {
return new ContatosMdFactory(getManager());
}
public PainelMdFactory painel() {
return new PainelMdFactory(getManager());
}
public GedMdFactory ged() {
return new GedMdFactory(getManager());
}
public LaboratorioMdFactory laboratorio() {
return new LaboratorioMdFactory(getManager());
}
public DepartamentoMdFactory departamento() {
return new DepartamentoMdFactory(getManager());
}
}
public class AppsRootModelFactory| Elemento | O que significa |
|---|---|
public | Acessível de qualquer pacote — getFactory() está no XTtreinamento em outro pacote |
AppsRootModelFactory | Apps = toda a aplicação · Root = ponto central · ModelFactory = entrega factories de models. O nome descreve o papel da classe, não o que ela guarda |
sem extends | Classe de organização pura — seu único trabalho é guardar o AppManager e entregar factories. Não precisa de nenhum comportamento do framework |
protected AppManager manager = null| Elemento | O que significa |
|---|---|
protected | Subclasses e classes do mesmo pacote podem acessar — não precisa ser público para o mundo inteiro |
AppManager | Contexto completo da requisição atual — carrega acesso ao banco, sessão do usuário e recursos do framework. É ele que os Models precisam para executar queries |
= null | Sempre começa null — será preenchido pelo construtor com parâmetro |
getManager() e setManager()| Método | O que faz |
|---|---|
getManager() | Devolve o AppManager guardado no campo manager. É chamado pelos métodos de factory ao criar as MdFactories: new DepartamentoMdFactory(getManager()) |
setManager() | Grava o AppManager no campo manager. É chamado pelo construtor com parâmetro na hora em que a factory é criada |
Os dois construtoresA classe tem dois construtores com assinaturas diferentes — isso se chama sobrecarga em Java:
| Construtor | O que faz |
|---|---|
AppsRootModelFactory() | Corpo vazio — manager permanece null |
AppsRootModelFactory(AppManager manager) | Recebe o AppManager e imediatamente chama setManager() para armazená-lo. O AppManager chega aqui empurrado pelo getFactory() do XTtreinamento — a action o recebeu do framework quando a requisição chegou e o repassa para cá |
public DepartamentoMdFactory departamento()Linha adicionada ao criar o módulo. Segue exatamente o mesmo padrão dos outros módulos:
public ContatosMdFactory contatos() { return new ContatosMdFactory(getManager()); }
public PainelMdFactory painel() { return new PainelMdFactory(getManager()); }
public GedMdFactory ged() { return new GedMdFactory(getManager()); }
public LaboratorioMdFactory laboratorio() { return new LaboratorioMdFactory(getManager()); }
public DepartamentoMdFactory departamento() { return new DepartamentoMdFactory(getManager()); }
| Elemento | O que significa |
|---|---|
public | Acessível de qualquer action via getFactory().departamento() |
DepartamentoMdFactory | Tipo de retorno — a factory do novo módulo, abordada no episódio 3 |
departamento() | Convenção do projeto: nome do módulo em minúsculo, sem parâmetros. Segue o padrão de laboratorio(), painel(), ged() |
new DepartamentoMdFactory(getManager()) | Cria a factory repassando o AppManager da requisição atual. Quando entidades forem adicionadas, o acesso será sempre por aqui: getFactory().departamento().xxxModel() |
Sem este método, getFactory().departamento() não existe e qualquer tentativa de acessar dados do módulo resultaria em erro de compilação.