O Model é uma camada fina em cima do DAO. Fica entre o formulário e o DAO — é onde as regras de negócio vão morar conforme o módulo crescer. Quarto arquivo da sequência CRUD READ — pequeno e quase vazio, mas cria o ponto de entrada pra qualquer regra futura.
Nota: nesta fase CRUD READ o Model tem só o construtor. Os métodos insert, update e delete vão chegar conforme as sequências CREATE, UPDATE e DELETE forem acontecendo — cada uma adiciona o método correspondente aqui. Como o Model estende o DAO, ele já herda daoList, então o código do setor de listagem consegue acessar o daoList usando a referência do Model.
package br.xt.app.departamento.produto;
import br.jasap.core.AppManager;
public class DepartamentoProdutoModel extends DepartamentoProdutoDAO {
public DepartamentoProdutoModel(AppManager manager) {
super(manager);
}
}
Porque nesta fase CRUD READ não tem regra de negócio nenhuma pra rodar. O agente só precisa BUSCAR produtos no almoxarifado — e pra isso o DAO já basta.
Em módulos mais complexos, o Model é onde entram validações, cálculos e propagações. Por exemplo, na sequência CREATE, um insert(bean) no Model poderia:
qs_produto (quick search) com o nome normalizado antes de gravarA gente cria o Model AGORA pra deixar a camada pronta. Quando a regra aparecer, ela entra aqui sem precisar mexer no formulário nem no DAO.
Porque o formulário e a listagem vão acessar tudo pelo Model — getFactory().departamento().proModel().daoList(...). Se o Model não estendesse o DAO, seria preciso criar duas instâncias separadas (uma do DAO, uma do Model) e gerenciar as duas.
Estendendo, o Model herda tudo do DAO (daoList agora, futuramente daoSingle, daoInsert, daoUpdate, daoDelete) e ainda pode SOBRESCREVER se precisar adicionar regra antes de chamar o método do DAO.
A cadeia completa de herança fica: JasapDAO → AppsRootDAO → DepartamentoProdutoDAO → DepartamentoProdutoModel — 4 níveis.
A MdFactory do Departamento — que é a ferramentaria local do módulo. Na primeira vez que alguém pede um ProdutoModel, a ferramentaria cria via new DepartamentoProdutoModel(manager), passando o cartão temporário. Depois guarda na prateleira pra reusar no mesmo pedido.
A corrente fica assim:
getFactory().departamento().proModel()super(manager)setManager + setDataBasepublic class DepartamentoProdutoModel extends DepartamentoProdutoDAO| Elemento | O que significa |
|---|---|
DepartamentoProdutoModel | Convenção do projeto: prefixo do módulo + entidade + Model |
extends DepartamentoProdutoDAO | Herda todos os métodos do DAO. Nesta fase READ, herda daoList. Nas próximas sequências, vai herdar também daoSingle, daoInsert, daoUpdate, daoDelete conforme forem adicionados no DAO |
DepartamentoProdutoModel(AppManager manager)Único método do Model nesta fase. Recebe o cartão temporário (AppManager) e passa direto pro construtor do DAO via super(manager). O construtor do DAO configura setManager e setDataBase — a conexão com o banco fica pronta pra uso.