Pergunta

A maioria das amostras MVC eu vi passar uma instância da vista para o controlador como este

public class View  
{  
Controller controller = new Controller(this);  
}

Existe alguma vantagem para passar uma classe que dá acesso a apenas as propriedades e eventos do controlador está interessado, como este:

public class UIWrapper
{
private TextBox textBox;

public TextBox TextBox
{
get {return textBox;}
}

public UIWrapper(ref TextBox textBox)
{
this.textBox = textBox;
}


public class View
{
UIWrapper wrapper = new UIWrapper(this);
Controller controller = new Controller(wrapper)
}
Foi útil?

Solução

Depende da sua arquitetura. Se você é todos no mesmo nível, então você pode ir sem o invólucro, embora eu provavelmente passar uma interface que Visualização de implementos para Controller. Funcionalmente, e a partir de uma perspectiva do acoplamento, a abordagem de interface e a abordagem invólucro são equivalentes.

No entanto, se UI está em um nível e o controlador está em outro, em seguida, passar / serialização de todo um objeto View pode ser difícil, ou mesmo ineficiente. Em casos como este, você pode querer passar um back DTO e para trás, o que seria mais fácil para serializar e, provavelmente, mais eficiente.

I tendem a favorecer a abordagem DTO, pois se sua arquitetura escalas, tudo que você precisa fazer é serializar e de-serialize.

Além disso, se sua opinião é complicado e tem muitas peças de dados para passar frente e para trás com o Controlador, você pode começar a combater a Lista cheiro Long Parameter com Introduzir objeto Parâmetro de qualquer maneira, que é essencialmente um DTO.

Mais uma coisa para você mastigar: Para uma visão complicado, controlador vai acabar precisando para mapear lotes de peças de dados para várias caixas de texto e outros controles de interface do usuário na exibição. A mesma coisa no sentido inverso: View acaba pegando dados de um grande número de controles e passá-los para vários métodos em seu controlador.

Eu gosto de separar estes dois. I dar uma vista de um DTO e considero o trabalho do Vista para saber para onde "plug in" e "plug out" cada pedaço de dados. Ambos Veja e controlador estão agora acoplada apenas à DTO, na medida em que os dados estão em causa de qualquer maneira.

Outras dicas

Há uma boa série de posts por Jeremy Miller em relação ao MVC / MVP tríade. Em particular, você pode estar interessado em parte 6 ele entra em detalhes sobre os Comms entre a vista e o controlador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top