Während meiner Ausbildung habe ich NHibernate für einige kleinere Projekte verwendet, die ich größtenteils selbst codiert und entworfen habe. Bevor nun ein größeres Projekt gestartet wurde, wurde diskutiert, wie der Datenzugriff gestaltet werden soll und ob eine ORM-Schicht verwendet werden soll oder nicht. Da ich mich noch in der Lehre befinde und mich immer noch als Anfänger in der Unternehmensprogrammierung betrachte, habe ich meiner Meinung nach nicht wirklich versucht, dies zu tun. Die Verwendung eines objektrelationalen Mappers für die Datenbank kann die Entwicklung erheblich erleichtern. Die anderen Programmierer im Entwicklungsteam sind viel erfahrener als ich, daher denke ich, dass ich einfach das tun werde, was sie sagen. :-)
Ich verstehe jedoch zwei der Hauptgründe für die Nichtverwendung von NHibernate oder eines ähnlichen Projekts nicht vollständig:
- Sie können einfach Ihre eigenen Datenzugriffsobjekte mit SQL-Abfragen erstellen und diese Abfragen aus Microsoft SQL Server Management Studio kopieren.
- Das Debuggen eines ORM kann schwierig sein.
Natürlich könnte ich meine Datenzugriffsschicht einfach mit vielen SELECT
s usw. erstellen , aber hier vermisse ich den Vorteil automatischer Verknüpfungen, verzögertes Laden von Proxy-Klassen und eines geringeren Wartungsaufwands, wenn eine Tabelle eine neue Spalte oder eine Spalte erhält umbenannt. (Aktualisieren von zahlreichen SELECT
, INSERT
und UPDATE
Abfragen gegen die Mapping - Konfiguration aktualisieren und möglicherweise Refactoring der Business - Klassen und DTOs.)
Wenn Sie NHibernate verwenden, können unvorhergesehene Probleme auftreten, wenn Sie das Framework nicht sehr gut kennen. Dies kann beispielsweise darin bestehen, der Tabelle Table.hbm.xml zu vertrauen, in der Sie die Länge einer Zeichenfolge festlegen, die automatisch überprüft werden soll. Ich kann mir jedoch auch ähnliche Fehler in einer "einfachen" SqlConnection-Abfrage-basierten Datenzugriffsschicht vorstellen.
Sind diese oben genannten Argumente wirklich ein guter Grund, ein ORM nicht für eine nicht triviale datenbankbasierte Unternehmensanwendung zu verwenden? Gibt es wahrscheinlich andere Argumente, die sie / ich möglicherweise übersehen haben?
(Ich sollte wahrscheinlich hinzufügen, dass ich denke, dass dies wie die erste „große“ .NET / C # -basierte Anwendung ist, die Teamarbeit erfordert. Gute Praktiken, die bei Stapelüberlauf als ziemlich normal angesehen werden, wie z. B. Komponententests oder kontinuierliche Integration, sind keine -bisher hier vorhanden.)