Unser Team hat früher NetTiers verwendet und fand es sehr nützlich. ABER... je mehr wir es benutzten, desto mehr Kopfschmerzen und Probleme fanden wir damit. Wenn man zum Beispiel eine Änderung an der Datenbank vornimmt, muss man die DAL mit CodeSmith neu generieren, was sehr aufwändig ist:
- Neugenerierung von Tausenden von Codezeilen in 3 verschiedenen Projekten
- Hunderte von gespeicherten Prozeduren neu zu generieren
Vielleicht gibt es andere Möglichkeiten, aber wir mussten es so machen. Die Neugenerierung des Quellcodes war in Ordnung, beängstigend, aber in Ordnung. Das eigentliche Problem kam mit den gespeicherten Prozeduren. Unbenutzte Stored Procedures wurden nicht bereinigt. Wenn man also eine Tabelle aus dem Schema entfernte und die DAL neu generierte, wurden die Stored Procedures für diese Tabelle nicht entfernt. Außerdem wurde dies zu einem ziemlichen Problem für Datenbankänderungsskripte, bei denen wir die alte Datenbankstruktur mit der neuen vergleichen und ein Änderungsskript erstellen mussten, um Client-Installationen zu aktualisieren. Dieses Skript konnte mehrere zehntausend Zeilen SQL-Code umfassen, und wenn bei seiner Ausführung ein Problem auftrat, was immer der Fall war, war es ziemlich mühsam, es zu beheben.
Dann ging mir ein Licht auf: NHibernate als ORM. Es hat sicherlich eine Anlaufzeit, aber es ist es wert. Es gibt eine Menge Unterstützung dafür, wenn Sie also etwas brauchen, wurde es höchstwahrscheinlich schon einmal gemacht. Es ist extrem flexibel und erlaubt es Ihnen, jeden Aspekt zu kontrollieren und noch einiges mehr. Außerdem wird es immer einfacher, es zu benutzen. Fluent Nhibernate ist eine großartige Möglichkeit, die benötigten XML-Mapping-Dateien loszuwerden, und NHibernate Profiler bietet eine hervorragende Schnittstelle, um zu sehen, was hinter den Kulissen geschieht, um die Effizienz zu steigern und Redundanzen zu beseitigen.
Der Wechsel von NetTiers zu NHibernate war schmerzhaft, aber auf eine gute Art und Weise. Sie hat uns dazu gezwungen, eine bessere Architektur zu entwickeln und die funktionalen Anforderungen neu zu bewerten. NetTiers bot tonnenweise Datenzugriffscode, wie z.B. "get this entity by its id", "get this other entity by its foreign key", "get a tlist and vlist of this and that", aber das meiste davon war unnötig und ungenutzt. NHibernate mit einem generischen Repository und benutzerdefinierten Repositories nur dort, wo sie benötigt werden, reduzierte tonnenweise ungenutzten Code und verbesserte die Lesbarkeit und Zuverlässigkeit.