Ich habe über MVP gelesen, insbesondere über Supervising Controller. Eine Sache, bei der ich Schwierigkeiten habe, meinen Kopf herumzureißen, ist die Interaktion der Ansicht mit dem Modell.
Nach meinem Verständnis sollte der Präsentator das Modell aktualisieren und die Ansicht aus dem Modell lesen. Der Präsentator kann die Ansicht auch über eine Schnittstelle aktualisieren. Martin Fowlers Artikel dazu scheint genau das zu zeigen ( http://martinfowler.com/eaaDev/SupervisingPresenter.html ).
Andere Artikel / Blogs zeigen jedoch die Ansicht, in der das Modell direkt aktualisiert wird ( https://blogs.msdn.microsoft.com/erwinvandervalk/2009/08/14/the-difference-between-model-view-viewmodel-and-other- getrennte Präsentationsmuster / ).
Ich weiß, dass dies nur Muster sind, daher wird es unterschiedliche Implementierungen geben, aber die Ansicht, die das Modell aktualisiert, scheint viel mehr zu tun, als es sollte.
Angenommen, ich hatte eine Personenklasse, die einen Namen und eine Telefonnummer enthielt. In der Ansicht können dieser Name und diese Nummer sowie eine Schaltfläche zum Senden angezeigt werden, um den Namen und die Nummer der Person zu ändern. Wenn Sie auf die Schaltfläche "Senden" klicken, wird erwartet, dass die Aktualisierung im Presenter und nicht in der Ansicht ausgeführt wird. In dem Artikel, auf den ich verwiesen habe, wird jedoch vorgeschlagen, dass die Ansicht das Modell direkt aktualisieren kann.
Sollte die Ansicht das Modell jemals aktualisieren? Oder sollte das nur vom Moderator erledigt werden?
BEARBEITEN:
Code aus dem MSDN-Artikel:
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;
}
}
Aus dem Artikel von Fowler's Supervising Presenter, den Sie in Ihrer Frage verlinkt haben:
Es wird klargestellt, dass die Ansicht für alle einfachen Aufgaben direkt mit dem Modell kommunizieren kann. Es widerspricht also nicht dem MSDN-Artikel. Dies liegt genau daran, dass Sie für die einfache Zuordnung / Bindung von Eigenschaften keine weitere Ebene benötigen, da dies die Dinge nur ohne großen Nutzen komplizieren würde.
Wieder spricht Fowler am Ende des Artikels darüber:
Sie sollten einige Dinge beachten:
if
Anweisungen in den Ansichtscode schreiben , überlegen Sie, ob diese eher zum Präsentator oder zum Modell gehören sollen.quelle