2009-08-25 2 views
2

Hier ist eine wirklich wirklich super-grundlegende Frage.Ansatz für n-Tier CRUD-Anwendungen in .NET

Angenommen, ich wollte - heute - eine Enterprise-CRUD-Anwendung in .NET mit einer n-Tier-Architektur erstellen. Welchen Datenzugriffsansatz sollte ich verwenden? Ich möchte Interoperabilität, also sind DataSets out (und ich nehme an, es ist nicht mehr 2003). Ebenso scheint die angekündigte Methode von .NET RIA Services, seine Funktionen über einen zusätzlichen Dienst für Nicht-Silverlight-Clients verfügbar zu machen, nicht sehr convincing für Aktualisierungsvorgänge zu sein. Ich habe Art von in der Lage, etwas mit Entity Framework, die keine n-Tier-Unterstützung OOB und so viele seltsame Reflexion-Art Zeug zu simulieren den Anschein von optimistischen Nebenläufigkeit (die example in MSDN Magazine sieht nicht so aus, als ob es optimistische Nebenläufigkeit unterstützt. Ich bin in der EF4 verbessert, aber ich bin ein bisschen skeptisch und es ist noch nicht wirklich verfügbar außer in CTP).

Also, was können Menschen tatsächlich auf ihre Projekte für Unternehmen CRUD mit update-check optimistischen Nebenläufigkeit tun? DataSets? DIY mit DTOs und Gott weiß, wie viel Arbeit? Und wie funktioniert das mit gebundenen Daten? Angenommen, ich habe eine Sammlung an ein DataGrid gebunden. Muss ich CollectionChanged für Änderungen anhören? Muss ich Stapel von Änderungen behalten, damit ich PKs vergleichen kann, wenn ein Undo rückgängig gemacht wird? Es scheint alptraumhaft.

Und zweitens, was ist, wenn Update-Prüfung auf optimistische Nebenläufigkeit keine schwierige Anforderung war? Was dann?

+0

Wie groß ist die App? Wie lange wird es im Dienst sein? Wie viele Benutzer? Ein Ort oder mehrere? Was ist die aktuelle Erfahrung und Wissensbasis der Entwickler? Sie sagen, Sie wollen Interoperabilität, aber mit was? Die Wahl von Technologielösungen ohne diesen Kontext ist sinnlos. –

Antwort

3

Zunächst einmal, wenn Sie in Zukunft auf VS2010 und .NET 4.0 umstellen möchten, empfehle ich dringend, in EF v4.0 zu suchen. Es hat sich seit der Veröffentlichung von EF v1.0 dramatisch verbessert und ist meiner Meinung nach ein starker Konkurrent gegen Leute wie nHibernate und Freunde. EF ist auch in vielen zukünftigen Dateninitiativen von Microsoft ein zentraler Akteur, so dass es nicht so einfach ignoriert werden kann wie früher. Es oder eines der höherwertigen .NET 4.0-Frameworks, die davon abhängen, sollten Ihre CRUD-Anforderungen gut erfüllen.

Abgesehen davon, würde ich nur sicherstellen, dass eine einfache CRUD-Ansatz aus einer Geschäftsperspektive am besten passt. CRUD macht aus technischer Sicht eine Menge Sinn, und in kleineren Anwendungen ist es normalerweise die richtige Wahl. Aber Sie haben den Begriff "Unternehmen" verwendet, daher bin ich neugierig, ob Ihre Anwendung einen größeren Umfang hat als die Einfachheit, die CRUD bietet.

Alles außerhalb Ihrer kleinen Firma mit 20-50 oder so Mitarbeitern, und ich würde in Domain Driven Design (DDD) und SOA schauen. Wenn Sie Dinge wie die Gleichzeitigkeitsverwaltung und ähnliche Dinge benötigen, sollten die Principals, die DDD steuern, Ihnen gut dienen. SOA ist im Allgemeinen für extrem große Projekte nützlich, in denen viele Entwicklungsteams gleichzeitig an mehreren Projekten arbeiten, die miteinander interagieren müssen. Es kann für Ihre Bedürfnisse übertrieben sein, aber es gibt einige gute Prinzipien, die noch helfen können.

+0

Vielen Dank. Dies ist eine große und komplexe Anwendung, die auf mindestens Hunderte von Benutzern skaliert werden kann. Lassen Sie mich klar sein - wenn ich n-Tier CRUD sage, meine ich SOA hier einzubeziehen. Meine Frage dreht sich wirklich um Änderungsverfolgung. Daher möchte ich, dass mein WCF-Dienst Operationen - die entweder eine einfache oder eine komplexe Semantik aufweisen - für meinen Client verfügbar macht. So wie ich es sehe, habe ich zwei Möglichkeiten: interoperable, plattformspezifische DTOs oder einige .NET-spezifische Technologien (wie EF), die möglicherweise Änderungsverfolgung für Updates eingebaut haben oder nicht. Es scheint die zweite Lösung könnte * viel * weniger Arbeit sein. Gedanken? – dks1983

+1

Entity Framework v4.0 hat eine vollständige mehrstufige Change-Tracking-Lösung. Sie haben tatsächlich eine offene Spezifikation für die Übertragung von Änderungsnachverfolgungsinformationen über das Netzwerk entwickelt. Wenn Sie also Nicht-.NET-Clients verwenden, sind sie dennoch kompatibel. Darüber hinaus bieten sie bei Bedarf eine vollständige Unterstützung für benutzerdefinierte Änderungsnachverfolgung. Wie ich bereits erwähnt habe, ist EF v4.0 (nicht v1.0) jetzt ein SERIOUS-Anwärter für die ORM-Krone. Wenn Änderungsverfolgung Ihr Hauptanliegen ist, sollten Sie sich EF unbedingt ansehen: http://blogs.msdn.com/efdesign/ – jrista

+0

Weitere Informationen finden Sie im ADO.NET-Blog: http://blogs.msdn.com/ adonet/ – jrista