Ola amigos estou com uma duvida.
Tenho um diagrama de sequencia Cadastrar Setor e queria saber o que vem depois da camada controle se e a camada Dao (Data Access Object) ou model.
Veja o meu diagrama se esta correto por favor.
Obrigado.
Camadas são um agrupamento de classes
O DAO sozinho não é uma camada. Ele faz parte da camada de persistência assim como o seu Model.
Se o seu modelo for anêmico, ou seja, o model apenas carrega os atributos pra la e pra ca, então o DAO vai fazer, tipicamente, coisas demais.
Vc pode ter uma abordagem mais Orientada a Objetos (DDD) e seus objetos terem mais significado (como ser capaz de validarem a si mesmos, etc). Ou eles podem substituir o DAO (padrão ActiveRecord). São muitas possibilidades
Pense assim: seus objetos existem enquanto há memoria e eletricidade. Como vc quer extender essa durabilidade, vc usa um banco de dados.
MVC é sobre agrupar classes de acordo com a função delas.
Grande Peczenyj obrigado pela ajuda mas então o que eu fiz ta certo?
Não faço ideia.
mas acho estranho a primeira interação de volta ser “Dados Cadastrados com Sucesso”
sendo q o Setor não cadastra, quem cadastra é o DAO
como vc valida o Setor? vc tem setores fixos ou isso esta cadastrado no banco de dados?
Nesse caso, o correto seria MAS, sinônimo de porém e não MAIS, quantitativo.
Vamos lá: onde você instancia e utiliza o objeto da classe Setor? Depois que ocorreu a persistência no banco de dados?
O diagrama de sequência visa definir, passo a passo, todas as etapas (todas é um exagero, apenas as principais) da execução de uma determinada ação em teu sistema, como a inclusão de um novo registro.
É dessa maneira que você precisa pensar.
Sobre o que o @peczenyj disse, ele está dando uma sugestão de abordagem que provavelmente vai além do que você já aprendeu. Foque no que você já viu e siga isso, não invente, faça o simples primeiro, depois vá evoluindo (muito embora o simples seja adotar uma outra abordagem, como ele sugeriu).
@peczenyj posso então retornar como true a mensagem que vem do modelo Setor retornando para o DAO?
Já que vc disse q quem cadastra e a dao.
E o modelo Setor possui um método de validação de campos para não deixar o campo vazio.
Se o codigo compilar, vc pode.
A questão é: vc deve?
Existem diversas formas de validar dados e vc pode adotar estratégias redundantes.
Vc não vai inserir dado errado no banco por conta das constraints, do dao, do model, da view que filtra e valida algumas coisad. Comece simples
@peczenyj cara eu tava validados os campos no Controle mas o pessoal começou a dizer q estava errado validar campos no controle e sim tinha que validar os campos na model
Se está seguindo a arquitetura MVC, a validação é no model. Controller é só meio de campo.
Independente do que seguir, tenha uma classe separada que seja responsável pela validação.
Não entendi pq está precisando fazer esse diagrama, se for trabalho de faculdade ok.
Dependendo do problema vc pode validar fora do model.
Tipo uma view que obriga o cara prencher e-mail, valida o format, etc.
Mas isso é uma estratégia de user experience + performance, quando vc quer evitar lidar com requisições erradas.
Quando vc lida com poucos acessos de poucas pessoas pode ser irrelevante. Pra um volume brutal ai pode ser interessante
Por isso eu evito ser rígido demais. Por outro lado sempre q vc sai do lugar comum vc pode ter muito mais problemas. Como vc explica pra outros programadores o q vc fez? Ta todo mundo esperando um MVC e ai alguem inventa um outro modelo, que é nanossegundos mais rápido porem complicado de entender?
Programar é controlar a complexidade.
Se vc tem dúvidas, tente varias formas. É bom pro nosso senso crítico.
@peczenyj e Javaflex vejam se este diagrama que acabei de fazer agora( hora - 00:58) está certo ok?
Eu não tenho como ajudar em relação a esse diagrama pois nunca nem vi isso sendo usado, mas se tiver alguma dúvida específica sobre a implementação é só falar.
Como está o caso de uso?
Entendo que seja algo como:
Certo?
Agora, a classe Usuario possui um método chamado validaLogin, sem parâmetros?
Onde instancia um objeto dessa classe?
Sim @darlan_machado só que eu esqueci de passar o método como boolean pq estou implementando em java ok!!!
Na Uml ficaria assim validaLogin() :Boolean.
Haaa sim o objeto é Usuario : usuario, mas isso não é opcional declarar desta forma no Diagrama de Sequência mas não posso declarar como somente Usuario?
Cara, eu entendo que, quando você não nomeia o objeto, está usando um objeto anônimo. Mas é o meu entendimento.
ok @darlan_machado!!!
No meu ponto de vista, o ControleLogin e o controleCadastrarSetor são como Facade para os models da aplicação, portanto eles também fazem parte do modelo. No JSF, não se programa a camada de controle, todas as classes são modelos e as views são os xhtml, a camada de controle é de responsabilidade do framework, e no SpringMVC é quase a mesma coisa.
Se for projeto Desktop, a camada de controle somente faria a navegação das telas e guardaria os recursos e instâncias (sessão):
class Tela extends JFrame {
Action action;
Model model;
JButton button;
public Tela() {
button.addActionListener({
model.executarTarefa();
action.executar(resultado);
});
}
}
class Controle {
Model model;
Tela tela1;
public Controle() {
tela1.setAction((resultado){
if resultado == "Sucesso" {
tela1.setVisible(false);
tela2.setModel(outroModel);
tela2.setVisible(true);
}
});
}
}
É muito relativo, mas na minha opinião, o nome não pode ser controle e o setor não deveria se alto validar, deveria criar uma outra classe para validação.
Qual a necessidade de criar o diagrama de sequência?
É provável que sejam desnecessários, pois não vejo complexidade na sequência das mensagens ou no comportamento. Mesmo que vc decida criar outros diagramas de sequencia, acredito que todos serão parecidos um com outro, provando ainda mais a desnecessidade deles. Recomendo que só faça isso para tarefas complexas, evitando para cadastros e login.
Cite a fonte dessa declaração, pois não vejo sentido algum nisso, são qualquer coisa, menos modelos, ainda mais se considerarmos estas definições.
Ok, quer uma definição melhor, lá vai:
Eu me refiro ao JSF, não achei sobre isso nos links que vc postou, não achei a fonte que eu li isso pois foi a muito tempo e era um site da Sun. Lembro que estava escrito que o ManagedBean fazia parte do modelo, se isso é verdade então o que seria o Controller no JSF? Poderia dar um exemplo?
Opa, preciso admitir que foi erro meu.
Segundo pode ser visto neste artigo, realmente você está certo e o managed bean é um componente da camada model, responsável pela lógica de negócios.
O controller é o próprio framework.
Segue https://www.tutorialspoint.com/jsf/jsf_architecture.htm
Não tenho 100% de certeza sobre o que postei esteja correto, mas talvez ter dito que “todas as classes são modelos e as views são os xhtml” tenha sido equivocado. Quando o projeto é bem feito, no JSF as classes costumam fazer parte do modelo, acredito que seja possível usar o ManagedBean como controle, mas não seria recomendável.
Pq na minha opinião o modelo e responsável pela persistência e pelas validações ou estou errado?
E gente estou programando em Java SE pelo amor de Deus não estou usando Java EE e tambem queria fazer uma modelagem que sirva para outras codificações em outras linguagens que usem o MVC.
Obrigado
Mas @diego12 eu uso a modelagem para implementar o codigo em php que possui MVC e existe controle.
Neste âmbito, sugiro considerar o seguinte:
Telas + listeners: view
Crie uma camada de controle, isolada
Crie as services necessárias.
Crie DAOs isolados
Acho que é isso
Não sei programar em PHP, mas dei uma pesquisada sobre “framework web PHP” e encontrei um que me parece fácil de usar:
Na documentação explica como usar o MVC, caso não queira usar um framework, vc pode implementar parecido.
Agora fiquei perdido. De onde veio o PHP para essa história?
Nao sei qual valor disso pro Negócio dele, mas parece que ele quer usar esse diagrama e implementar em mais de uma tecnologia seguindo a mesma arquitetura. Mas não ficou claro o que ele quer fazer com Java e PHP.
Teoricamente, a modelagem deveria permitir implementação em qualquer linguagem.
Me parece mais um trabalho acadêmico.
Mas, não faz sentido implementar em duas linguagens.
Também não entendi o sentido de nada, parece ser academico mesmo.
Galera relaxa esquece que eu disse sobre usar modelo para implementar em duas linguagens de programação
Obs: isso não e um trabalho acadêmico pois já sou formado em Analise de Sistemas minha duvida e pq na faculdade onde aprendi só ensinaram de um model para outro.
Tranquilo, pq essa preocupação toda com diagrama de UML faz parecer ser acadêmico.
@javaflex to modelando um sistema de controle de estoque só para exercitar Ok!! Abraços a todos do Forum!!!
Ola galera surgiu outra duvida em Mvc.
Os métodos de verificação de campos em branco e validação do CPF fica em que Parte do MVC?
No modelo ou na Controle?
Obrigado.
Bem recente: /t/duvida-com-mvc
Resumindo: No modelo.
Pois @javaflex se e no modelo então que tenho que fazer a validação tenho que criar outra classe para validar contendo somente os métodos de validação ou posso fazer na mesma classe Usuario?
E na hora de Logar eu posso fazer um metodo na classe validar para realizar o login ou tambem posso fazer na classe usuario.
Exemplo:
public class Usuario {
private String nome;
private String email;
private String usuario;
private String senha;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
import javax.swing.JOptionPane;
public class validacao {
public void validarCampos(Usuario u) {
if (u.getNome().isEmpty() || u.getEmail().isEmpty() || u.getUsuario().isEmpty() || u.getSenha().isEmpty()) {
JOptionPane.showMessageDialog(null, "Por Favor Preencha Todos os Campos!!!!", "AVISO", JOptionPane.ERROR_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Usuario Cadastrado com Sucesso!!!!", "AVISO", JOptionPane.INFORMATION_MESSAGE);
}
}
}
Portanto que fique no model, pra MVC não importa o como vai ser feito. Eu prefiro fazer validações em classes separadas. No caso do Java é mais prático usar bean validation.
Obs.: JOptionPane é view, não deverá ter isso no model.
@javaflex se não posso usar o JOptionPane em outras camadas como vou carregar minhas consultas do banco na camada Dao se não posso usar o ArrayList.
E eu não estou implementando o meu código em JavaEE e sim JavaSE
Onde viu que nao pode usar ArrayList? Voce vai retornar uma List com as validações ou consultas. JOptionPane só na view Swing.
Só quem pediu isso pode avaliar se atende. É só um diagrama, seja lá qual importancia disso, parece já estar de bom tamanho para iniciar a implementação e entregar funcionalidade (isso que deve se preocupar em estar correto).