Ich werde zwei Anwendungen erstellen. Einer von ihnen in WPF und der zweite in ASP.MVC. Ich habe mich entschieden, einen Webservice zu erstellen, der eine Ebene zwischen der Datenbank und meinen Anwendungen darstellt. Ich möchte keine Entitätsmodelle in meinen Apps verwenden. Ich möchte leichtgewichtige Modelle erstellen, sie an den Webservice senden und sie dann in die Entitätsmodelle übersetzen. Meine Frage ist, wie man ein gemeinsames Modell für WPF und MVC erstellt? Ich weiß nicht, wie ich das machen soll, weil ich die Datenanmerkungsattribute für MVC verwenden und auch die INotifyPropertyChanged-Schnittstelle für WPF implementieren möchte. Es wird auch andere Dinge geben, denke ich. Gibt es einen guten Ansatz dafür? Oder es ist unmöglich?Gemeinsame Modelle für WPF und ASP.NET MVC
Antwort
Nun, in erster Linie ist nichts falsch mit Exponierung Klassen außerhalb der DAL. Sie sind nur Klassen. Es gibt nichts besonderes an ihnen. Was macht sie Datenbank-Zeug ist ihre Einbeziehung in eine DbContext
-Klasse, und Sie könnten tatsächlich alle Anmerkungen und andere Konfiguration in den Kontext mit fließenden Config bewegen und haben unberührte Klassen ohne irgendeine Art von Einfluss von außen in ihnen.
Außerdem gibt es eine Tendenz, sowieso zu viele Konfigurationen zu Entity-Klassen hinzuzufügen. Sie sollten nur Dinge haben, die wichtig sind auf einer Datenbankebene. Dinge wie [EmailAddress]
, die angeben, wie eine Eigenschaft beim Post validiert werden soll, sind für eine Entitätsklasse ungeeignet.
Das heißt, der Ort, um Dinge wie [EmailAddress]
und andere Sicht-spezifische Dinge zu setzen ist auf Ansicht Modelle. Das sollte den Rest Ihrer Verwirrung ziemlich aufklären. Müssen Sie INotifyPropertyChanged
implementieren? Tun Sie das mit einem Ansichtsmodell. und mappe deine Entitätsdaten zu/von ihr.
Tun Sie es einfach nicht, wie ich einige Leute gesehen habe, und erstellen Sie eine DTO-Klasse, die im Grunde eine exakte Kopie Ihrer Entitätsklasse ist, nur um die Daten von einem Ort zu einem anderen in Ihrer App zu übertragen. Das ist nutzlos und fügt nur zusätzliche Dinge hinzu, um die Wartung und zusätzliche Arbeit zu leisten, die Ihre App ohne Nutzen ausführen muss. Die Entitätsklasse ist ein DTO. Geben Sie es von Ihrem Dienst zurück und ordnen Sie es dann Ihrem Ansichtsmodell zu. Erledigt.
Um das letzte Bit zu verdeutlichen, sollten die Klassen, die für Ihre WPF/MVC-Apps wichtig sind, ihre Ansichtsmodelle sein, und diese werden nur für die App verwendet. Die Logik für das, was in WPF benötigt wird, und das Zuordnen von Entitätsdaten zu/von diesem gehört zur WPF-App. Es wäre 100% unangemessen, Code-Erzeugungs-Klassen-Instanzen zu haben, die direkt in einer WPF-Anwendung verwendet werden, um von einem Dienst erzeugt zu werden, der mit dem Erhalten der Daten an erster Stelle befasst sein soll. Dies wäre eine Verletzung des Grundsatzes der einheitlichen Verantwortung. Lass jedes Ding tun, wozu es entwickelt wurde. Bewahren Sie WPF-Code mit WPF-Code auf. Sie könnten immer noch eine Bibliothek haben, die die Zuordnung zwischen der Datenschicht und Ihren WPF-Ansichtsmodellen behandelt, aber das sollte eine separate Sache sein, die nur eine Abhängigkeit in Ihrer WPF-App darstellt.
- 1. ASP.Net MVC - Modelle und Benutzersteuerelemente
- 2. ASP.net Mvc Gemeinsame Daten für Fußzeile
- 3. ASP.NET MVC - WCF-Klassen für Modelle
- 4. Ansichtsspezifische Modelle in ASP.NET MVC?
- 5. ASP.NET MVC - verschiedene Modelle für Masterseite und Ansichtsseite
- 6. Mehrere Modelle Einzelansicht Asp.net mvc
- 7. Gemeinsame Funktionalität über mehrere ASP.NET MVC-Controller
- 8. ASP.NET MVC-Modelle, die Tabellendaten bestellen
- 9. ASP.NET MVC, Schichten, Modelle, Repositories usw.
- 10. DRY-Modelle mit fließendem NHibernate und ASP.NET MVC
- 11. Asp.net MVC 4 API und Knockout.js: Generiere Knockout.js Modelle
- 12. ASP.NET MVC - Mehrere Modelle in einer Form und Modell Bindemittel
- 13. klare Richtlinien und Best Practices für die gemeinsame Verwendung von JQuery und ASP.NET MVC?
- 14. ASP.NET MVC - ViewModels für Bearbeiten
- 15. MVC-Frameworks für WPF
- 16. Gemeinsame WPF-DataGridTemplateColumn-Vorlage?
- 17. Aurelia und Modelle in ASP.net Kern
- 18. C# meinen WPF MvvM-Code in Asp.Net konvertieren Mvc
- 19. MVC teilweise Ansichten, Modelle und mehr
- 20. Django MVC-Muster für nicht datenbankgesteuerte Modelle?
- 21. Wie übergebe ich mehrere Modelle zu Teilansichten in ASP.NET MVC
- 22. ASP.NET gemeinsame Steuerelemente Quellcode
- 23. Gemeinsame ASP.NET-Vorbereitungsfunktionen und ihre Ergebnisse
- 24. Sollen Modelle in ASP.Net MVC alle Zeichenfolgen anzeigen?
- 25. ASP.NET MVC Gemeinsame Nutzung von JavaScript-Dateien aus der Klassenbibliothek
- 26. ASP.NET MVC Zwei Modelle in ove Ansicht, Codeänderung
- 27. MVC ViewModel - Mehrere Modelle
- 28. Gemeinsame Basisklasse für Benutzersteuerelemente und Seiten in ASP.NET
- 29. LoginStatus für ASP.Net MVC?
- 30. Ist es möglich, zwei Modelle in einem asp.net mvc anzeigen
INotifyPropertyChanged ist keine mit WPF (oder UI) verbundene Schnittstelle. Erstellen Sie verschiedene ViewModel-Klassen für Desktop- und Webprojekte sowie allgemeine Modell- und Entitätsobjekte. –