Qual a melhor forma de implementar MVC com Swing?

Bom dia pessoal! Estou criando uma aplicação desktop (swing) simples de cadastro de clientes, produtos e vendas, apenas para praticar e aprender alguns padrões de projeto. Estou usando DAO e Abstract Factory para a camada de acesso (ou persistência), na camada de negócios concentro as classes que formam o núcleo do sistema (Cliente, Produto, Venda, etc.) e as classes de infra-estrutura (ClienteBO, ProdutoBO, etc.) que utilizam as classes anteriores e os DAOs. Na camada de apresentação estou tentando utilizar o padrão MVC, porém estou tendo dificuldade em decidir a abordagem que devo utilizar para implementar corretamente o padrão por se tratar de uma aplicação desktop. Quando terminar penso em criar uma nova camada de apresentação voltada para web, e já tenho o esquema em mente pra implementar o MVC: JSPs na visão, Servlets no controlador. Ex.: JSP envia requisição a um Servlet fachada (controlador principal), este delega o trabalho a um servlet mais específico (tipo ControladorClientes) que acessa a camada de negócios (ClienteBO) pra executar a tarefa.

A minha dúvida é saber qual a forma correta de aplicar o padrão MVC em uma aplicação desktop. Li em alguns artigos que deveria instanciar minha visão e meu modelo a partir do controlador e tratar todos os eventos nele, porém, pra isso meu controlador deveria implementar todos os listeners necessários ou possuir uma classe interna que os implementasse. Além do que eu teria certa dificuldade em acessar os componentes das telas (visão) já que estes são atributos privados. Eu teria então que criar getters que me retornassem esses objetos para que eles pudessem ser modificados na classe de controle.

Daí pensei o seguinte: já que o controlador faz parte da camada de apresentação (e tb será modificado ao migrar para web), qual o problema em colocá-lo dentro da classe de visão como uma classe interna tratadora de eventos? Foi o que fiz, e agora estou na dúvida se esta abordagem é correta ou não, e se não é, qual a forma correta de fazê-lo?

Ficou mais ou menos assim:

class TelaCliente {
  private ControladorEventos controlador;
  private JButton ..... (objetos da tela)
  public TelaCliente() {
    .... (crio a GUI e instancio os objetos)
    botao.addActionListener(controlador);
  }
  
  private class ControladorEventos implements ActionListener, OutrosListeners {
    public void actionPerformed(ActionEvent evento) {
      //agora um grande conjunto de ifs:
      if(evento.getSource() == botaoAdicionarCliente) {
        clienteBO.adiciona(cliente);
      }
      //outros ifs...
    }
  } // fim da classe ControladorEventos

}//fim da classes TelaCliente

Bom, a idéia é essa. Desculpem por me alongar tanto e obrigado!