He estado leyendo sobre MVP, específicamente Supervising Controller. Una cosa que tengo dificultades para entender es cómo interactúa la Vista con el Modelo.
Entendí que el presentador debería actualizar el modelo y que la vista se lee desde el modelo. El presentador también puede actualizar la vista a través de una interfaz. El artículo de Martin Fowler sobre esto parece mostrar exactamente eso ( http://martinfowler.com/eaaDev/SupervisingPresenter.html ).
Sin embargo, otros artículos / blogs muestran la vista actualizando el modelo directamente ( https://blogs.msdn.microsoft.com/erwinvandervalk/2009/08/14/the-difference-between-model-view-viewmodel-and-other- patrones de presentación separados / ).
Sé que estos son solo patrones, por lo que habrá diferentes implementaciones, pero la vista que actualiza el modelo parece estar haciendo mucho más de lo que debería.
Digamos, por ejemplo, que tenía una clase de persona que contenía un nombre y número de teléfono. La vista puede mostrar este nombre y número y un botón de enviar para cambiar el nombre y el número de la persona. Cuando se hace clic en el botón Enviar, esperaría que la actualización se maneje en el Presentador, no en la Vista. Sin embargo, el artículo al que hice referencia propone que la vista puede actualizar directamente el modelo.
Entonces, ¿debería la vista actualizar el modelo? ¿O debería ser solo el presentador?
EDITAR:
Código del artículo de 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;
}
}
Del artículo de Supervising Presenter de Fowler que vinculó en su pregunta:
Dice claramente que para todas las tareas simples, la vista puede hablar directamente con el modelo. Por lo tanto, no contradice el artículo de MSDN. Esto es exactamente porque para un mapeo / enlace simple de propiedades no necesita involucrar otra capa ya que esto solo complicaría las cosas sin mucho beneficio.
Nuevamente, Fowler habla sobre esto al final del artículo:
Debes tener en cuenta algunas cosas:
if
declaraciones en el código de vista, piense si deberían pertenecer al presentador o modelo.fuente