MVC - Separar a view do controlador com classes anônimas(interface) é uma boa solução?

Estamos discutindo a refatoração de uma aplicação! Nossa aplicação tenta seguir o padrão MVC, porém, estamos com dúvidas referente a separação entre a view e o controller a partir de interfaces.

Se o objetivo do MVC e separa model e view, pq separar e ter tanto trabalho para separar o controlador? Isso criaria a quarta camada, não? E depois a quinta e sexta e …

Acredito que essa não seja uma boa solução, visto que teremos inúmeras interfaces e que a manutenção será dobrada por conta visto que a interface da view deverá ter a assinatura de todos os métodos para poder ser manipulados no controller e vice versa.

Isso geraria na minha opnião mais dependência do que o ter uma view para cada controlador e pronto!

Poderiam dar uma clareada nessas questões?

o código que está para ser aplicado é este:

public interface TesteController(){
public String teste();
}

public interface TesteView(){
public String viewTeste();
}


public class Teste extends JDialog implements TesteView(){

private TesteController; //isso aqui representaria o meu controlador

//codigos iniciais e talls

public String viewTeste(){
//faz algo aqui
}
//codigos extras
}
}



public class Controlador implements TesteController(){

private TesteView; //representaria a minha view

//codigos iniciais e talls

public String Teste(){
//faz algo aqui
}
//codigos extras
}
}

Qual solução aplicar : “Uma View tem um controlador e pronto” ou uma view tem uma interface que representa um controlador e um controlador tem uma interface que representa uma view"

Qual a avaliação de vocês quanto a isso? Preciso de idéias!

Isso não é MVC e MVC não depende da quantidade de camadas. O controlador deve apenas responder pedidos de eventos da view, tratar e atualizar o modelo. Quem atualiza a view é o modelo, que deve estar num estado “bindado” a view. Aconselharia a utilizar um framework de “bind” de bean com a view. Como o Gênesis por ex. Mas ok, vamos lá: Você realmente vai fazer assim? (eu faria o controlador sendo uma classe aninhada, assim não precisaria ter uma referencia a view também no controller). Então está usando interfaces, pq seu nível de abstração entende que um dia pode querer usar IoC para mudar a implementação do controle ? Tudo bem, daria pra fazer assim mesmo.

peerless, A view manda uma info para o controlador, o controlador chama o modelo, carrega as coisas e devolve pra view! certo?

imagine que eu tenha uma JTable, ai quando eu clico em carregar, o controlador chama o modelo para carregar as informaçoes e depois pega uma referencia da view(anônima) para pintar as colunas de vermelho por exemplo caso o valor da coluna numero 1 seja maior que 50.

Uma famila de controladores tbm poderia ser uma boa solução. Na minha opnião! Facilitando o polimorfismo dentro das views!

eu penso comigo que a implementação poderia seria mais flexivel e menos trabalhosa assim:


public class controlador(){}

public class Tela extends JDialog{

private Controlador control;

public Tela(){
control = new Controlador(); // possiveis parametros ignorados
}

}

preciso de avaliações sobre essas soluções, para que eu possa compreender realmente qual a melhor solução…

obrigado

só um adendo : Interfaces não são Classes, muito menos são Classes Anónimas. Elas podem ser usadas para criar classes anónimas, mas são coisas diferentes.

Criar classe anónima de uma itnerface



Comparator c = new Comparator (){
 
       public int compare(Object a, Object b ){
                /// compara
       }

}

sergiotaborda, obrigado por traduzir o que eu tentei dizer e não consegui! :stuck_out_tongue:

O Swing já implementa MVC. Então o que vc precisa implementar é MVP (Model View Presenter)
O view são os controles swing. o Presenter são os modelos dos objetos swing (TableModel, etc…)
O swing chama os modelos swing para obter os dados, o modelo swing tem que obter os dados conforme uma logica da aplicação e apresentá-los conforme ( quiçá pintar linhas etc… ) Isso é o Presenter. Uma classe que implementa o modelo swing e mais alguma coisa que seja necessária ( por exemplo um Renderer). Ou divide isso em várias classes e o conjunto será o presenter. O Model é sempre a mesma coisa, o backoffice acessivel via um serviço ou um façade.

sim sim, entendi sim! Mas eu gostaria que generalizasse um pouco mais o nosso contexto! Gostaria de saber sobre as soluções que mostrei! Quais os pontos fracos dessa abordagem com interfaces e se ela é uma boa solução.

Tem muita coisa que eu devo mudar, mas o primeiro passo é o de como melhorar a arquitetura geral de controle (no primeiro post).

obrigado! :stuck_out_tongue: