Welche Fragen kann ich mir zu unserem Design stellen, um festzustellen, ob wir in unserer Anwendung DTOs oder Self-Tracking Entities verwenden sollten?
Hier sind einige Dinge, die ich beachten kann:
Also, wie kann ich feststellen, was für uns richtig ist? Ich habe EF noch nie benutzt, daher weiß ich wirklich nicht, ob STEs für uns richtig sind oder nicht.
Ich habe gesehen, dass Leute vorschlagen, mit STEs zu beginnen und nur DTOs zu implementieren, wenn sie zu einem Problem werden, aber wir haben derzeit DTOs und versuchen zu entscheiden, ob die Verwendung von STEs das Leben einfacher machen würde. Wir sind früh genug in dem Prozess, dass Switching nicht zu lange dauern würde, aber ich möchte nicht zu STEs wechseln, nur um herauszufinden, dass es nicht für uns funktioniert und alles zurückschalten muss.
Wenn ich Ihre Architektur verstehe, ist es meiner Meinung nach nicht gut für STEs weil:
Der Hauptvorteil (und der einzige Vorteil) oder STEs ist ihre Tracking-Fähigkeit, aber die Tracking-Fähigkeit funktioniert nur, wenn STE auf beiden Seiten verwendet wird:
Kurz gesagt: Es gibt keine zusätzlichen Modelle auf Client- oder Serverseite. Um STEs vollständig zu nutzen, müssen sie:
seinJedes andere Szenario bedeutet einfach, dass Sie die Vorteile der Self-Tracking-Fähigkeit nicht nutzen und Sie sie nicht benötigen.
Was ist mit Ihren anderen Anforderungen?
Dies sollte wahrscheinlich möglich sein, aber stellen Sie sicher, dass jeder "Lazy Loaded" -Teil eine separate Struktur ist - erstellen Sie kein komplexes Modell auf der Client-Seite. Ich habe schon Fragen gesehen, bei denen Leute ganze Entity-Graphen für Updates zurücksenden mussten, was nicht das ist, was Sie immer wollen. Aus diesem Grund sollten Sie keine geladenen Teile in ein einzelnes Objektdiagramm einfügen.
Ich bin mir nicht sicher, wie du das wirklich erreichen willst. STEs verwenden keine Projektionen, daher müssen Sie Felder direkt in Entitäten löschen. Beachten Sie, dass Sie dies tun müssen, wenn sich die Entität nicht im Tracking-Status befindet oder Ihre Maskierung in der Datenbank gespeichert wird.
Es ist etwas, das kein Problem von STEs ist. Der Server muss einen korrekten EF-Kontext verwenden, um Daten zu laden und zu speichern.
STEs sind eine Implementierung von Änderungssatzmustern. Wenn Sie sie verwenden möchten, sollten Sie ihre Regeln befolgen, um das Muster voll auszunutzen. Sie können etwas Zeit sparen, wenn sie richtig verwendet werden, aber diese Beschleunigung kommt mit dem Verzicht auf einige architektonische Entscheidungen. Wie bei jeder anderen Technologie sind sie nicht perfekt und manchmal sind sie schwer zu benutzen (folgen Sie einfach Self-Tracking-Entities <) / a> tag, um Fragen zu sehen). Sie haben auch einige schwerwiegende Nachteile , aber in .NET WPF-Client Du wirst sie nicht treffen.
Sie können STE für das gegebene Szenario wählen,
POCO sind dynamisch proxied und spielen nicht nett auf dem Draht sehen diesen MSDN Artikel für die Problemumgehung obwohl . Sie können also gemacht werden, aber IMO geht es besser los mit STE, da ich glaube, dass sie sich gut mit der WPF / MVVM-Entwicklung decken.
Tags und Links wcf entity-framework-4 n-tier-architecture poco self-tracking-entities