2016-09-07 1 views
0

Ich habe einen WCF service erstellt, der die Daten meiner Datenbank offen legt, da ich nicht möchte, dass meine Anwendung direkt auf die Datenbank zugreift (aus Sicherheitsgründen) und ich Daten mit Anwendungen von Drittanbietern teilen muss.Ist es besser, POCO-Objekte oder ein losgelöstes EntityFramework-Objekt zu verwenden, um die Datenbank über WCF verfügbar zu machen?

Meine Lösung ist folgendermaßen aufgebaut: WPF application ->WCFService library ->DataAccessLayer library. (Pfeile Montage Abhängigkeiten definieren ‚hängt von‘)

die WCF service ich einfach als zu implementieren, um detached EntityFramework objects vom Dienst zurück, aber es zwingt die Hauptanwendung eine Abhängigkeit von der DataAccessLayer Bibliothek haben.

Die einzige Art, wie ich um das zu bekommen ist POCO objects zu erzeugen und verwendet sie, um sie über den Draht zu senden, aber jetzt habe ich Werte zur Karte hin und her EntityFramework.

Im Moment i s bin Erzeugung POCO dynamisch über eine T4 template und ich verwende AutoMapper, um Werte hin und her EntityFramework.

Der Wcf-Dienst muss nur das Repository-Muster implementieren, um Daten verfügbar zu machen.

Ist das eine gute Lösung? Gibt es noch eine andere Option? Gibt es irgendwelche Mängel, denen ich bewusst sein sollte?

Antwort

0

Abhängig von Ihren Einschränkungen, würde ich dieser Lösung zustimmen müssen.

Ich schuf eine fast identische Lösung, obwohl unsere Motivationen etwas anders waren. Unser Client war Delphi Win32 und hatte zu dieser Zeit keine gute Unterstützung für JSON, daher mussten wir SOAP verwenden.

Der Client unterstützte auch keine Nullable-Primitive. Daher löschten die POCOs alle nicht unterstützten Typen und führten andere Änderungen aus, um die Interoperabilität zu gewährleisten. Anschließend verwendeten wir Automapper-benutzerdefinierte Zuordnungen für die Zweiwegekonvertierung.

Alle WCF-Dienste (Verträge und Implementierungen) wurden auch mit T4-Vorlagen generiert, wobei ein generisches Repository verwendet wurde. Mit T4-Vorlagen konnte ich einen separaten WCF-Dienst pro Tabelle für CRUD-Vorgänge generieren und manuell erstellte WCF-Dienste erstellen, die geschäftsspezifisch waren.

Schließlich konnte ich auch T4-Vorlagen verwenden, um die Delphi-Repositorys zu generieren, die mit den SOAP-Diensten interagierten.

Oder

Sie könnten genauso gut die POCOs bewegen (und Code-Generierung) in ein separates Projekt, ändern Sie Ihre DataAccessLayer Bibliothek die POCOs Bibliothek verweisen und nur die Db Kontext aus DbSets gemacht enthalten Ihrer POCOs und Datenzugriffslogik, aber keine Entitäten (die jetzt POCOs sind). Ihre Clients müssen nicht von der DataAccessLayer-Bibliothek abhängig sein.

Also ... eine gute Lösung, abhängig von Ihren Einschränkungen.

Verwandte Themen