Bom dia.
Estou trabalhando em um novo emprego agora, e me deparei com a arquitetura já utilizada na empresa, no desenvolvimento de um pequeno portal para atender as necessidades da gerência. Neste Portal são agregado sistemas de controle de contratos e pessoal.
Essa arquitetura é composta pelos Beans de cada objeto:
public class Contrato{
private int idContrato;
private String nomeContrato;
// get's e set's
}
Pelos Java Form’s de cada Objeto:
public class ContratoForm extends ActionForm {
private int idContrato;
private String nomeContrato;
public void reset(ActionMapping mapping, HttpServletRequest request) {
nomeContrato = "";
}
// get's e set's
}
Dos action’s que tratam as ações de cada objeto:
public final class ContratoAction extends Action {
public ActionForward editarContrato(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
return mapping.findForward("editar");
}
}
De classes que chamamos de Manter que invocam os métodos declarados na Interface e ligam ao DAO (Me corrijam se estiver errado, por favor…):
public class ManterContrato {
private IContratoDAO contratoDAO = FabricaContratoDAO.getInstancia()
.getContratoDAO();
public Contrato contrato(int idContrato) throws Exception {
return contratoDAO.contrato(idContrato);
}
public void incluirContrato(Contrato contrato) throws Exception {
contratoDAO.incluirContrato(contrato);
}
// outros métodos
}
Das Interfaces:
public interface IContratoDAO {
public Contrato contrato(int idContrato) throws Exception;
public void incluirContrato(Contrato contrato) throws Exception;
// outros métodos
}
De Fábricas de Objetos:
public class FabricaContratoDAO {
private static FabricaContratoDAO fabricaContratoDAO = new FabricaContratoDAO();
private FabricaContratoDAO() {
// Carrega informações de qual DAO deve ser carregado de um properties
// ou XML
}
public IContratoDAO getContratoDAO() {
// faz os testes e retorna a instancia a ser usada
return ContratoDAO.getInstancia();
}
public static FabricaContratoDAO getInstancia() {
return fabricaContratoDAO;
}
}
Dos DAO’s, que possuem um método getInstancia que o liga à fabrica:
public class ContratoDAO implements IContratoDAO {
private static final ContratoDAO ContratoDAO = new ContratoDAO();
//Declaração de query's
private static final String STMT_CONTRATO = "SELECT * FROM contrato";
// demais query's
public Contrato contrato(int idContrato) throws Exception {
// conexão com o banco e retorno do objeto Contrato
}
// outros métodos
public static ContratoDAO getInstancia() {
return ContratoDAO;
}
}
Gostaria da opinião de vocês com relação a esta arquitetura, e sobre melhorias que possam ser implementadas.
Valeu galera.