tabs.addTab(c, nome, null); t.setClosable(true); tabs.setSelectedTab(c);}... package naskar.ui;import naskar.application.AbrirContaUC;import naskar.infrastructure.Controller;import naskar.infrastructure.ViewManager;public class AbrirContaController extends Controller { // use case private AbrirContaUC uc; public AbrirContaController(AbrirContaUC uc) { this.uc = uc; } // init public AbrirContaView init(ViewManager viewManager) { setViewManager(viewManager); return new AbrirContaView(this); } // uma acao do usuario public void abraConta(AbrirContaView view) { //TODO: regras de telas uc.abraConta(new Long(view.getIdAgencia()), view.getNomeCliente(), view.getRG()); }}Na View, teremos os componentes de interface com usuario sendo criados e os eventos sendo disparados para o Controller, que ira ter as regras de tela necessarias e ira chamar os casos de uso, que terao as regras de negocio.package naskar.ui;import naskar.infrastructure.View;import com.vaadin.ui.Button;import com.vaadin.ui.Component;import com.vaadin.ui.Label;import com.vaadin.ui.TextField;import com.vaadin.ui.VerticalLayout;import com.vaadin.ui.Button.ClickEvent;import com.vaadin.ui.Button.ClickListener;public class AbrirContaView implements View { // form private VerticalLayout form; // campos private TextField campoIdAgencia = new TextField(); private TextField campoNomeCliente = new TextField(); private TextField campoRG = new TextField(); // controller private AbrirContaController controller; public AbrirContaView(AbrirContaController controller) { this.controller = controller; init(); } @SuppressWarnings("serial") private void init() { form = new VerticalLayout(); form.addComponent(new Label("Agencia: ")); form.addComponent(campoIdAgencia); form.addComponent(new Label("Nome Cliente: ")); form.addComponent(campoNomeCliente); form.addComponent(new Label("RG: ")); form.addComponent(campoRG); Button btCriarConta = new Button("Efetuar Abertura de Conta"); btCriarConta.addListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { controller.abraConta(_this()); controller.getViewManager().showMsg("Conta aberta com sucesso."); } }); form.addComponent(new Label("")); form.addComponent(btCriarConta); } // public String getIdAgencia() { return (String)campoIdAgencia.getValue(); } public String getNomeCliente() { return (String)campoNomeCliente.getValue(); } public String getRG() { return (String)campoRG.getValue(); } // public void setIdAgencia(String idAgencia) { this.campoIdAgencia.setValue(idAgencia); } public void setNomeCliente(String nomeCliente) { this.campoNomeCliente.setValue(nomeCliente); } public void setRG(String campoRG) { this.campoRG.setValue(campoRG); } // private AbrirContaView _this() { return this; } // view @Override public Component getComponent() { return form; } }Veja que para cada Controller, sempre teremos um ou mais Views, ou seja, Controller e Views sao intimamente relacionados:fonte: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.htmlConclusaoA "magica" do MVC e a separacao dos componentes de interface com usuario de quem trata os eventos gerados pelo usuario. Devido o Vaadin ser muito facil de usar, pode acontecer de suas classes "incharem" e ficarem com grandes responsabilidades. O MVC vai te ajudar a separar essas responsabilidades e deixar o codigo mais claro.Veja tambem os padroes MVP e PAC, que relatam tambem desse tipo de separacao da apresentacao das regras de tela e de negocio.Voce pode baixar aqui essa aplicacao de exemplo onde contem os casos de uso Abrir Conta e Consultar Saldo implementados.