WPF MVVM Stammdaten einmalig laden, oder lieber jedes Mal per Join + Instanziierung

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    WPF MVVM Stammdaten einmalig laden, oder lieber jedes Mal per Join + Instanziierung

    Hallo Leute,

    aktuell überlege ich bei folgendem Szenario wie ich's löse:

    Das Programm besitzt einige Stammdaten wie zum Beispiel Länder.

    Macht es hier mehr Sinn die Länder einmalig bei Start ins Haupt-ViewModel - oder in ne Hilfsklasse mit Static Properties zu laden -, oder sollte jedes ViewModel die Daten für sich erneut laden?
    Bei den Ländern kann man ja auch davon ausgehen, dass keine Neuen während der Laufzeit hinzukommen, wäre ja meiner Meinung nach ein weiteres Kriterium was zur Entscheidung beitragen könnte/sollte.

    Gedanken zum einmaligen Laden:
    - Nunja, passiert halt nur 1x statt jedes Mal wenn ein View sich mit zugehörigem ViewModel zeigt (weniger DB Auslastung, etc pp..)
    - Zukünftige SQL Abfragen könnten ggf. auf die Untertabellen verzichten, da ich durch die Parent Tabelle ja an die nötige ID komme, dann kann ich mir aus den Stammdaten das Land mit der jeweiligen ID ziehen (zum Beispiel mit der Single-Funktion).
    - Man müsste nicht bei jeder Abfrage neue Instanzen erstellen
    - Verletzt das ggf. die MVVM Regeln?
    - BindingSources können sehen, dass es sich bei Objekten um die selben Instanzen handelt, man spart sich also das Überschreiben der Equals & GetHashCode Funktion
    - Wenn man in einer View zum Beispiel einen Leer-Datensatz zulassen will (damit man zum Beispiel nach allen Ländern filtern kann, statt nur einem), dann müsste man mit einer CompositeCollection (hab ich gelesen) arbeiten, da die View nicht ein ViewModel mit passender Property besitzen würde.

    PS: Bisher habe ich immer pro View die Daten geladen..
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Hab keine Ahnung von WPF und vom MVVM Pattern, jedoch würde ich es nur einmal Laden. Wär doch albern die selben Daten immer wieder neu zu laden, oder?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Rootbob91: Hab ich bisher auch immer so gemacht (Jedes Viewmodel hat zugriff auf einen DataProvider und holt sich über eine Property die Daten)

    Meiner Meinung nach ist das so zu sehen: Sind die Stammdaten recht klein? Dann einmal laden. Wenn du aber (relativ) viele Daten zu laden hast, lässt sich überlegen, ob man nicht einfach hergeht und immer nur das läd, was gerade gebraucht wird. Hintergrund: Arbeitsspeicher sparen.

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell