Auxilio na arquiteturação de um projeto seguinte o padrão MVC [Resolvido]

Olá pessoal, estou iniciando a programar implementações GUI, e precisava de algumas explicaçoes de como estruturar meu projeto.

Estou com algumas dúvidas, como:

  • eu criei minha GUI e a modelagem do sistema (Classes do negócios), como eu faço a parte do Controller? Eu crio uma classe principal que trata de tudo?

Vlw galera!

Olá,

Vou tentar te explicar isso tudo!

É o seguinte, considerando que você já construiu sua interface gráfica vamos entender os outros componentes.

Controller : Essa é a classe responsável por receber uma ação, ação essa que foi desencadeada na GUI pelo usuário que esta usando o sistema.
O controller também é responsável por recuperar as informações passadas pela interface, formata-las e enviar para uma outra camada
que seria a camada de negócio.
Após o processamento na camada de negócio ele responde ao usuário.

Service: Essa seria sua camada de negócio onde você irá validar suas informações e processa-la propriamente dito, isso inclui enviar para uma outra
camada que é responsável por armazenar no banco de dados.

DAO: Classe responsável por manipular os dados do seu sistema, considerando que é um banco de dados, ela seria responsável porque salvar seus objetos
e fazer consultas dos mesmos.

Vou fazer um código de exemplo, segue:

          public class MyController {
                  UserService userService;
  
                public   MyController(UserService userService) {
                      this.userService = userService;
                }
                  
                @Path("/url/usuario/vai/chamar")  
                public Retorno createUser(User user) {
                       
                      Boolean status =   userService.verifyAndSaveUser(user);     
             
                      return status ? new Retorn("OK") : new Retorna("Error");
               }
         }

Agora a sua classe de negócio, que no nosso exemplo é UserService

        public class UserService {
               UserDAO userDAO;  
              
               public UserService(UserDAO userDAO) {
                    this.userDAO = userDAO;
               }
       

               public Boolean verifyAndSaveUser(User user) {
                 
                      //Valida o usuario
                      if (user.hasErrors()) return false;


                      userDAO.saveOrUpdate(user);

                      return true;  
       
               }
       }
  

Sua classe de DAO seria uma alguma coisa parecido com isso:

      public class UserDAO {
            SessionFactory sessionFactory;

            public UserDAO(SessionFactory sessionFactory){
                  this.sessionFactory= sessionFactory;
             }
           
           public void saveOrUpdate(User user) {
              sessionFactory.getSession().saveOrUpdate(user);
          }
 
      }

Mande mais dúvidas!!

abraço!

Valeu pela ajuda mmaico!
Uma dificuldade que encontrei foi a seguinte: nas interfaces gráficas eu vou ter que criar as ações, certo? Essas ações eu tenho que tratar no controller? Ou têm uma certa regra dependendo do tipo de ação?

Outra questão: eu tenho que criar uma classe Principal que será responsável de chamar a tela de login. Onde eu devo colocar toda a estrutura do programa? Por exemplo, se eu quiser armazenar os dados só dos usuários num Map, onde eu instancio este Map, na classe Principal, ou na GUI que está responsável pelo Login?

Olá Richel Sensineli,

Todas as suas ações serão tratadas no controller, essa é a unica camada que fala diretamente com a sua interface.

abraço!

Ahh sim, beleza mmaico!..
Vou ver se consigo algum avanço neste entendimento…
Mas desde já, obrigado pela ajuda!

Abraço!

Bom, consegui tratar todos os eventos, mas tem como eu colocar os Actions Listeners numa única classe, a qual seria o Controller, certo?? Eu tentei fazer uma nova classe normalmente, mas não deu certo. Você teria algum exemplo?

Valeuu!

E ai Rapaz, eu ainda nem tive tempo que ver o seu código :frowning:

Mas é o seguinte, quando se está falando de desktop com swing a coisa muda de figura, não é tão simples montar uma arquitetura organizada, porque não se tem
tantos frameworks para fazer isso pra você.

O seus actionListener irão chamar o seu controller e ai segue aquele fluxo que haviamos conversado anteriormente.

Entao ficaria alguma coisa assim:
TelaDeLoginView -
[code]
buttonLogin.addActionPerform(new ActionListener () {

                          public void actionPerformed(ActionEvent e) {
           
                                 controllerDeLogin.autenticarUsuario(paramsComLoginESenha);
                          }
           });

[/code]

Sacou a idéia??

Da uma olhada nisso que pode de ajudar : http://magnus-k-karlsson.blogspot.com.br/2012/01/how-to-implement-mvc-model-view.html

Vou tentar da uma olhada no seu código, é que eu estou na correria então se sabe, né!?

abraço!

E ai man,
Atualizei seu projeto agora a estrutura esta a seguinte:
View - > ActionListener -> Controller - Classe de negócio.

Resumo:
As views somente monta a tela e recebe um actionListener para receber comportamento, esses são disparados para o controller e assim enviado
para sua classe de negócio.

Siga esse modelo porque esta parecido com WEB que fazendo um paralelo ficaria assim:
Views seriam o HTML
ActionListeners seriam o JavaScript
Controller segue no mesmo esquema
E classe de negócio tb segue o mesmo esquema.

É isso ai!

Recebi o e-mail, estou reestruturando, muito bem feito mmaico. Valeu pela ajuda, estou conseguindo me adequar a uma metodologia kkk :stuck_out_tongue:
Mals o encomodo aeee!

Abraço!

Valeu mmaico pela força! Consegui terminar… :smiley:

Abraço!

Que bom rapaz, se precisar é só chamar!

abraço!!!