Ir ao conteúdo
  • Cadastre-se

Cadastro em Camadas


Hesodia

Posts recomendados

Bom eu to fazendo um cadastro que tenho 3 classes e nelas tenho que ter os métodos de (inserir, alterar, excluir, listar e consultar) dai to com dúvida para ligar os métodos aos formulário.

vou mostrar o exemplo da minha classe Médico

Meu Repositório:



private Medico medico;
private RepositorioMedicoLista proximo;

public RepositorioMedicoLista() {

this.medico = null;
this.proximo = null;
}

public void inserirMedico(Medico medico) {
if (this.medico == null) {
this.medico = medico;
this.proximo = new RepositorioMedicoLista();
} else {
this.proximo.inserirMedico(medico);
}
}

public void removerMedico(String crm) {
if (this.medico != null) {
if (this.medico.getCrm().equals(crm)) {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
} else {
this.proximo.removerMedico(crm);
}
}
}

public Medico listagemMedico() {
return medico;

}

public Medico consultarCodigo(Medico medico) {
Medico ret = null;
if (this.medico == null) {
throw new RuntimeException("Consulta sem resultado");
} else {
while (this.proximo != null) {
if (this.medico.getCodigo().equals(medico.getCodigo())) {
ret = this.medico;
} else {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
}
}
}
return ret;
}

public Medico consultarNome(Medico medico) {
Medico ret = null;
if (this.medico == null) {
throw new RuntimeException("Consulta sem resultado");
} else {
while (this.proximo != null) {
if (medico.getNome().equals(medico.getNome())) {
ret = this.medico;
} else {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
}
}
}
return ret;
}

public Medico consultarCrm(Medico medico) {
Medico ret = null;
if (this.medico == null) {
throw new RuntimeException("Consulta sem resultado");
} else {
while (this.proximo != null) {
if (medico.getCrm().equals(medico.getCrm())) {
ret = this.medico;
} else {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
}
}
}
return ret;
}

public Medico consultarTodos() {
return medico;

}

public void alterarCodigo(String codigo) {
if (this.medico != null) {
if (this.medico.getCodigo().equals(codigo)) {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
} else {
this.proximo.alterarCodigo(codigo);
}
}
}

public void alterarNome(String nome) {
if (this.medico != null) {
if (this.medico.getNome().equals(nome)) {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
} else {
this.proximo.alterarNome(nome);
}
}
}

public void alterarCrm(String crm) {
if (this.medico != null) {
if (this.medico.getCrm().equals(crm)) {
this.medico = this.proximo.medico;
this.proximo = this.proximo.proximo;
} else {
this.proximo.alterarCrm(crm);
}
}
}

/**
* @return the proximo
*/
public RepositorioMedicoLista getProximo() {
return proximo;
}

/**
* @param proximo the proximo to set
*/
public void setProximo(RepositorioMedicoLista proximo) {
this.proximo = proximo;
}
}
public class RepositorioMedicoLista {

Controlador:



private RepositorioMedicoLista repositorio;

public ControladorMedico() {
this.repositorio = new RepositorioMedicoLista();
}

public void inserirMedico(Medico medico) throws ExcecaoMedico {
if (medico == null) {
throw new ExcecaoMedico("Infomar o medico");
}
if (medico.getCrm().trim().equals("")) {
throw new ExcecaoMedico("Infomar o crm do medico");
}
if (medico.getNome().trim().equals("")) {
throw new ExcecaoMedico("Infomar o nome do medico");
}
if (medico.getCodigo().trim().equals("")) {
throw new ExcecaoMedico("Informar o código do medico");
}
this.repositorio.inserirMedico(medico);
}

public Medico listagemMedico(Medico medico) throws ExcecaoMedico {
if (medico == null) {
throw new ExcecaoMedico("Consulta sem resultados");
} else {
return repositorio.listagemMedico();
}
}

public Medico consultarCodigo(Medico medico) throws ExcecaoMedico {
if (medico.getCodigo() == null) {
throw new ExcecaoMedico("Consulta sem resultados");
} else {
return repositorio.consultarCodigo(medico);
}
}

public Medico consultarNome(Medico medico) throws ExcecaoMedico {
if (medico.getNome() == null) {
throw new ExcecaoMedico("Consulta sem resultados");
} else {
return repositorio.consultarNome(medico);
}
}

public Medico consultarCrm(Medico medico) throws ExcecaoMedico {
if (medico.getCrm() == null) {
throw new ExcecaoMedico("Consulta sem resultados");
} else {
return repositorio.consultarCrm(medico);
}
}

public Medico consultarTodos() throws ExcecaoMedico {
return repositorio.consultarTodos();

}
}
public class ControladorMedico {

Minha Exceção:



public ExcecaoMedico(String mensagem) {
super(mensagem);
}
}
ublic class ExcecaoMedico extends Exception {

E por fim minha fachada(Onde ainda não chamei todos os métodos):



private ControladorConsulta controladorconsulta;
private ControladorMedico controladormedico;
private ControladorPaciente controladorpaciente;

public Fachada() {
this.controladorconsulta = new ControladorConsulta();
this.controladormedico = new ControladorMedico();
this.controladorpaciente = new ControladorPaciente();
}

public void inserirConsulta(Consulta consulta) throws ExcecaoConsulta {
this.controladorconsulta.inserirConsulta(consulta);
}

public void inserirMedico(Medico medico) throws ExcecaoMedico {
this.controladormedico.inserirMedico(medico);
}

public void inserirPaciente(Paciente paciente) throws ExcecaoPaciente {
this.controladorpaciente.inserirPaciente(paciente);
}

public Medico listagemMedico(Medico medico) throws ExcecaoMedico {
return controladormedico.listagemMedico(medico);
}

public Medico consultarCodigo(Medico medico) throws ExcecaoMedico {
return controladormedico.consultarCodigo(medico);
}

public Medico consultarNome(Medico medico) throws ExcecaoMedico {
return controladormedico.consultarNome(medico);
}

public Medico consultarCrm(Medico medico) throws ExcecaoMedico {
return controladormedico.consultarCrm(medico);
}

public Medico consultarTodos() throws ExcecaoMedico {
return controladormedico.consultarTodos();
}

void listagemMedico(String[] s) {
throw new UnsupportedOperationException("Not yet implemented");
}
}
public class Fachada {

Dai eu tenho meu FormMedico onde tem uma lista para aparecer minhas consultas. Um botão de inserir onde abre um novo form do tipo JDialog onde eu vou inserir os dados.

Ai beleza.

No Form JDialog eu fiz o código lá para adicionar meu Médico mas ta dando erro.


//Declarei em cima private Fachada fachadamedico;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
Medico adicionar = new Medico();
adicionar.setNome(campoNome.getText());
adicionar.setCodigo(campoCodigo.getText());
adicionar.setCrm(campoCrm.getText());
String[] s = new String[3];
s[0] = campoNome.getText();
s[1] = campoCodigo.getText();
s[2] = campoCrm.getText();
fachadamedico.listagemMedico(adicionar);
} catch (ExcecaoMedico ex) {
Logger.getLogger(FormCadastroMedico.class.getName()).log(Level.SEVERE, null, ex);
}

Dai ta dando erro ele não adicionar.

E no meu botão de consulta onde iria aparecer os dados que eu cadastrei ta assim.


// TODO add your handling code here:

try {
Medico medico = new Medico();
if (!campoConsultar.getText().trim().equals("")) {
medico.setCodigo(campoConsultar.getText());
medico = fachadamedico.consultarCodigo(medico);
String[] s = new String[1];
s[0] = medico.getCodigo();
lista.setListData(s);
} else {
while (medico.getProximo() != null) {
medico = medico.getProximo();
medico = fachadamedico.consultarTodos();

}
}


} catch (ExcecaoMedico ex) {
Logger.getLogger(FormMedico.class.getName()).log(Level.SEVERE, null, ex);
}




}
private void BotaoConsultarActionPerformed(java.awt.event.ActionEvent evt) {                                               

Se alguem puder me ajudar. Valeu.

E se algum puder postar um projeto com algum cadastro e telas tambem para eu dar uma olhada pra dar uma sacada eu agradeço tambem.

Link para o comentário
Compartilhar em outros sites

Se fosse fazer algo assim, e pra ter uma melhor separação das camadas, substituiria esse chamada direta do objeto no controlador por um objeto contexto.. algo +- assim


public void inserir(ContextoInterface contexto) {
Medico medito = contexto.getMedico();
// efetua os testes que você propos ...
// ...
// Instancia a camada de repositorio
RepositorioInterface repositorio = new RepositorioInterfaceImplementacao();
// Invoca a ação desejada de inserção
// Repassa objeto previamente checado
repositorio.inserir(medico);
}

O método "void inserir(contexto)" poderia até retornar alguma coisa, como um valor String ou alguma Enumeração, confirmando erro ou sucesso na operação, ou simplemente envia uma exceção caso ocorra um erro, e na próxima camada, a camada de visualização, você invoca e/ou trata os erros ocorridos na camada controller, um ex:


// Este é um exemplo de inserir na camada de visão
// controla tudo que será apresentado ao usuario
public void inserir() {
// Caso seja necessario passar algum parametro para o contexto
// para facilitar a recuperação dos dados, como um objeto input, ou
// facilitar a extração dos dados na camada de visão, objeto output, este
// é o ponto certo
ContextoInterface contexto = new InterfaceContextoImpl();
// Aqui é instancia o objeto controller, que contém o método inserir
// apresentado acima
ControllerInterface controller = new ControllerInterfaceImpl();
// Invoco a ação de inserir do controller, eu passo um objeto do contexto // aqui, para a recuperação dos dados
controller.inserir(contexto);
}

Assim eu transfiro a responsabilidade de recuperar e retornar as informações do usuario para essa "camada" contexto (não é bem uma camada, é uma classe auxiliar) e deixo a camada de controller somente com a responsabilidade de puxar os dados do contexto e invocar o repositorio.

Se o seu trabalho for algo mais profissional, e quiser pensar no reuso, eu te aconselho a dividir ainda mais as camadas, por ex: ter uma camada repositorio como a que você propos, ela apenas persiste a informação.. uma segunda camada de serviço, ela contém a regra de negócio e invoca serviço da camada inferior (repositorio), terceira camada controllers apenas recupera dados do contexto e invoca funcionalidades da camada inferior (serviço) e por último visão que cria o contexto e invoca funcionalidades de controller... mas porque fazer tudo isso? dessa forma você poderir alterar uma camada sem interferir nas outras, na visão você poderia ter uma página web ou um programa desktop swing, a camada visão seria alterada mas controller seria a msma.. espero ter ajudado

Link para o comentário
Compartilhar em outros sites

Se fosse fazer algo assim, e pra ter uma melhor separação das camadas, substituiria esse chamada direta do objeto no controlador por um objeto contexto.. algo +- assim


public void inserir(ContextoInterface contexto) {
Medico medito = contexto.getMedico();
// efetua os testes que você propos ...
// ...
// Instancia a camada de repositorio
RepositorioInterface repositorio = new RepositorioInterfaceImplementacao();
// Invoca a ação desejada de inserção
// Repassa objeto previamente checado
repositorio.inserir(medico);
}

O método "void inserir(contexto)" poderia até retornar alguma coisa, como um valor String ou alguma Enumeração, confirmando erro ou sucesso na operação, ou simplemente envia uma exceção caso ocorra um erro, e na próxima camada, a camada de visualização, você invoca e/ou trata os erros ocorridos na camada controller, um ex:


// Este é um exemplo de inserir na camada de visão
// controla tudo que será apresentado ao usuario
public void inserir() {
// Caso seja necessario passar algum parametro para o contexto
// para facilitar a recuperação dos dados, como um objeto input, ou
// facilitar a extração dos dados na camada de visão, objeto output, este
// é o ponto certo
ContextoInterface contexto = new InterfaceContextoImpl();
// Aqui é instancia o objeto controller, que contém o método inserir
// apresentado acima
ControllerInterface controller = new ControllerInterfaceImpl();
// Invoco a ação de inserir do controller, eu passo um objeto do contexto // aqui, para a recuperação dos dados
controller.inserir(contexto);
}

Assim eu transfiro a responsabilidade de recuperar e retornar as informações do usuario para essa "camada" contexto (não é bem uma camada, é uma classe auxiliar) e deixo a camada de controller somente com a responsabilidade de puxar os dados do contexto e invocar o repositorio.

Se o seu trabalho for algo mais profissional, e quiser pensar no reuso, eu te aconselho a dividir ainda mais as camadas, por ex: ter uma camada repositorio como a que você propos, ela apenas persiste a informação.. uma segunda camada de serviço, ela contém a regra de negócio e invoca serviço da camada inferior (repositorio), terceira camada controllers apenas recupera dados do contexto e invoca funcionalidades da camada inferior (serviço) e por último visão que cria o contexto e invoca funcionalidades de controller... mas porque fazer tudo isso? dessa forma você poderir alterar uma camada sem interferir nas outras, na visão você poderia ter uma página web ou um programa desktop swing, a camada visão seria alterada mas controller seria a msma.. espero ter ajudado

Não entendi muito o que você quis dizer ai. To iniciando ainda ai ainda to perdido. Se tiver como me ajudar no que eu postei. Valeu.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!