2017-05-31 1 views
-1

Lassen Sie uns sagen, ich habe eine Person ModellNull Eigenschaften Down-Stream-in MVC/MVVM

Person 
{ 
    firstName //Required 
    lastName //Required 
    jobTitle //Optional 
} 

In meiner Datenbank habe ich einen Eintrag ("John", "Smith", "")

Wenn Ich erhalte das Modell, ich werde Person.jobTitle auf NULL setzen.

Jetzt möchte ich diesen Eintrag in einer Ansicht machen als solche

First Name: John 
Last Name: Smith 
Job Title: Unknown 

In der MVVM-Pipeline, wo soll dieser Übergang von NULL zu Unknown gemacht werden?

Sollte es:

1) Propagieren den ganzen Weg hinunter zu der Ansicht, wo möglicherweise würde ein anderer Programmierer wissen müssen die Nullprüfung zu tun?

2) Beim Erstellen des Ansichtsmodells transformiert werden, wobei das Ansichtsmodell eine Eigenschaft in der Art von jobTitleDisplayValue aufweisen würde.

3) Sollte es im View-Modell zwei Eigenschaften geben, in der Art von doSJobTitleExist und jobTitle. Auf diese Weise würde ein anderer Programmierer wissen, dass jobTitle null sein kann.

4) Sollte die Eigenschaft im Modell selbst nicht NULL sein?

5) ...

+0

haben Sie eine Lösung versucht? Hat es funktioniert? Brauchst du mehr Hilfe? –

Antwort

1

Nun, in diesem speziellen Beispiel würden Sie im Idealfall nur Daten Annotationen verwenden um damit umzugehen, anstatt zusätzliche Eigenschaften zu erzeugen. Siehe verlinkten Artikel, wie Sie Anzeigetext für Nullwerte verändern können:

https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.nulldisplaytext(v=vs.110).aspx

Aber außerhalb dieser spezifischen Beispiel, das ich glaube, ich bekommen, was Sie fragen, und es wird eine der Fragen sein, die die Antwort richtig von Dev zu Dev unterscheiden. Persönlich bin ich ein Fan davon, die Daten zu transformieren, während ich sie in mein Ansichtsmodell lade, denn das ist im Grunde der Hauptzweck (imo), Daten für die Ansicht zu modellieren. Es erzwingt jedoch das Schreiben von Logik für das Packen und Entpacken der Daten in das Modell für Updates, so dass die Datenbindung mühsamer wird. Ich bevorzuge jedoch die Kontrolle, dies zu tun. Ich bin mir sicher, dass jemand mit einem 300k Ruf an dieser Stelle mir höchstwahrscheinlich sagen wird, dass ich völlig fehlgeleitet bin.

+1

Einverstanden..aber ich habe auch nicht die erforderlichen 300K ;-) Scheint so, als ob das Viewmodel da ist, um die Ansicht zu entlasten * ... Dinge wie die Lokalisierungen umgehen zu lassen und die Steuerelemente unbemerkt von Datenartefakten machen Null. – Clay

1

Lasst uns den Zweck einer MVVM Architektur recape:

  • die Ansicht ist, wie Sie Anzeige Ihre Daten
  • die Ansichtsmodell ist, wo Sie die Logik Unternehmen setzen und die Informationen (durch die Model), ohne etwas über die zu wissen. View.So

ist die null die Sache, die von einem Ansichtsmodell Sicht wichtig ist: es bringt eine wichtige Informationen über dem der reale effektive JobTitle: null.

Die Ansicht könnte die JobTitle darstellen so wie es will: als Unknown oder Not asked oder Not available ... aber die Geschäftslogik bleibt das gleiche: ein nullJobTitle.

diese Geklärte, haben Sie mindestens 2 Möglichkeiten:

1) Verwenden Sie die TargetNullValue property of the Binding In diesem Fall würden Sie schreiben:

Text="{Binding JobTitle, TargetNullValue=Unknown}" 

2) eine Converter verwenden, und in der Convert Verfahren schreiben:

return value ?? "Unknown"; 

Ich würde die erste Option verwenden, es ist einfacher.

+1

für die zweite Option, würde 'Job zurückgeben ?? "Unbekannt"; "nicht ausreichend? – Flater

+0

@Flater guten Fang, ich werde meine Antwort bearbeiten –

Verwandte Themen