Olá.
Está havendo uma certa confusão de conceitos. A camada de persistência não é prevista pela arquitetura MVC. Apenas modele-a como uma quarta camada, que conhece o modelo, mas não tem conhecimento do controller ou da view.
No Model, represente o seu sistema. Os componentes. Seus problemas. A “inteligência” do seu sistema, que resolve esses problemas. No MVC clássico, esse model deve ser “observável” pela interface, que por sua vez deve ser capaz de se atualizar (http://en.wikipedia.org/wiki/Observer_pattern).
A validação dos dados pode ser papel do Controller, mas muitas vezes vai exigir colaboração do Model (exemplo: como saber se já existe um usuário cadastrado com determinado e-mail?).
Mais leitura:
http://fragmental.com.br/wiki/index.php?title=MVC_e_Camadas
Enfim, um pouco de prática.
Pela breve descrição do teu problema, imagino que no modelo haja duas classes. Uma classe Usuario, e uma outra, que mantém uma lista ordenada de objetos Usuario e uma referencia ao “atual” (e que tem também os metodos e a lógica para retornar proximo, ultimo, anterior, primeiro).
Na arquitetura proposta pelo swing, deverias usar subclasses de javax.swing.Action para cada ação (“proximo”, “anterior” etc) e fazer uso delas na camada de apresentação (“view”, a janela do programa). Segue código exemplo.
Model class Model extends Observable {
private Usuario atual;
private List<Usuario> list;
public Usuario proximo() {}
public Usuario anterior() {}
public Usuario atual() {}
...
public void setUsuario(Usuario u) {
...
setChanged();
notifyObservers();
}
}
Controller [code]
public class ProximoAction extends AbstractAction implements Action {
private Model model;
public ProximoAction(Model m) {…}
public void actionPerformed(ActionEvent evt) {
model.setUsuario(model.proximo()); //gera um evento na interface
}
}[/code]
View [code]
public class View extends JFrame {
private Model model;
public View (Model m) {
this.model = m;
model.addObserver(this); //registra-se como “observador”
}
…
public void construirJanela() {
jButtonProximo = new JButton();
jButtonProximo.setAction(new ProximoAction(this.model)); //instancia o controller
}
…
public void update(Observable obs, Object obj) {
//mudou o usuario ‘atual’ do modelo
//atualizar campos na tela usando dados do usuario atual
Usuario u = this.model.atual();
}
}[/code]
Note que este approach é bem simplista, e dificilmente seria suficiente para sistemas maiores e mais complexos. E eu nem fiz a camada de persistência.
Podem ser necessários eventos e listeners mais especializados, pode ser necessário que a própria camada de apresentação mantenha um estado (http://www.martinfowler.com/eaaDev/PresentationModel.html).
Pode-se optar por responsabilizar o controller pela atualização da camada de apresentação. Pode-se usar algum framework para fazer “binding” automático (https://binding.dev.java.net/ - https://genesis.dev.java.net/).
Mas… bom… não vou escrever um livro. Não aqui, agora.
[]s
Bruno