AppsRootModelFactory editar arquivo

0:00 / 0:00

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.

CÓDIGO COMPLETO
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

ElementoO que significa
publicAcessível de qualquer pacote — getFactory() está no XTtreinamento em outro pacote
AppsRootModelFactoryApps = 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 extendsClasse 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

ElementoO que significa
protectedSubclasses e classes do mesmo pacote podem acessar — não precisa ser público para o mundo inteiro
AppManagerContexto 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
= nullSempre começa null — será preenchido pelo construtor com parâmetro

getManager() e setManager()

MétodoO 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 construtores

A classe tem dois construtores com assinaturas diferentes — isso se chama sobrecarga em Java:

ConstrutorO 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()); }
ElementoO que significa
publicAcessível de qualquer action via getFactory().departamento()
DepartamentoMdFactoryTipo 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.