Eu tenho lido sobre MVP, especificamente Supervisionando Controller. Uma coisa que estou tendo dificuldade em entender é como o View interage com o Modelo.
Entendi que o apresentador deveria atualizar o modelo e que o View lê do modelo. O Presenter também pode atualizar a exibição por meio de uma interface. O artigo de Martin Fowler sobre isso parece mostrar exatamente isso ( http://martinfowler.com/eaaDev/SupervisingPresenter.html ).
No entanto, outros artigos / blogs mostram a visualização atualizando o modelo diretamente ( https://blogs.msdn.microsoft.com/erwinvandervalk/2009/08/14/the-difference-between-model-view-viewmodel-and-other- padrões de apresentação separados / ).
Sei que esses são apenas padrões, portanto, haverá implementações diferentes, mas a exibição da atualização do modelo parece estar fazendo muito mais do que deveria.
Digamos, por exemplo, eu tive uma classe de pessoa que continha um nome e número de telefone. A visualização pode exibir esse nome e número e um botão de envio para alterar o nome e o número da pessoa. Quando o botão enviar é clicado, eu esperaria que a atualização fosse realizada no Presenter e não na View. No entanto, o artigo que referi propõe que a visualização pode atualizar diretamente o modelo.
Então, a visualização deve sempre atualizar o modelo? Ou isso deve ser tratado apenas pelo apresentador?
EDITAR:
Código do artigo do MSDN:
public class PersonalDataView : UserControl, IPersonalDataView
{
protected TextBox _firstNameTextBox;
public void SetPersonalData(PersonalData data)
{
_firstNameTextBox.Value = data.FirstName;
}
public void UpdatePersonalData(PersonalData data)
{
data.FirstName = _firstNameTextBox.Value;
}
}
No artigo Fowler's Supervising Presenter, que você vinculou na sua pergunta:
Diz claramente que, para todas as tarefas simples, a visualização pode falar diretamente com o modelo. Portanto, isso não contradiz o artigo do MSDN. Isso ocorre exatamente porque, para mapeamento / associação simples de propriedades, você não precisa envolver outra camada, pois isso apenas complicaria as coisas sem muitos benefícios.
Novamente, Fowler fala sobre isso no final do artigo:
Você deve ter em mente algumas coisas:
if
instruções no código de exibição, pense se essas devem pertencer ao apresentador ou modelo.fonte