Meine Situation ist, dass ich im Wesentlichen vermasselt habe. Ich habe meine Codebasis vor etwa 1,5 Jahren geerbt, als ich diese Position übernahm, und anstatt das Rad neu zu erfinden, obwohl ich jetzt weiß, dass ich hätte, behielt ich die DAL in etwa der gleichen Struktur wie der vorherige Entwickler.Welche DAL-Strategie verwenden Sie oder schlagen Sie vor?
Im Wesentlichen gibt es eine Datei (jetzt bei 15k Zeilen Code), die als ein zwischen einer Reihe von DAOs, die DataSets und TableAdapters zum Abrufen von Daten verwenden, dienen. Meine xsd-Dateien sind so groß geworden, dass R # Visual Studio bei jedem Öffnen zum Absturz bringt und die Zwischenklasse, die jetzt 15k Zeilen umfasst, auch für die Analyse von R # dauern wird. Ganz zu schweigen davon, dass es hässlich ist, es funktioniert aber nicht gut und ist ein absoluter Albtraum zum Debuggen.
Was ich bisher versucht habe, ist der Wechsel zu NHibernate. NHibernate ist eine großartige Bibliothek, aber unglücklicherweise war es nicht anpassungsfähig genug, um mit meiner Anwendung zu arbeiten. Nach Aussage des Hauptentwicklers (Fabio Maulo) ist es eine Kombination aus meinen Anwendungsanforderungen und den Einschränkungen von NHibernate bei der Verwendung von Identitäten als Datenbank PK-Strategie.
Also jetzt bin ich zurück, um meine eigene DAL im Wesentlichen zu entwerfen. Ich schaue mir dafür ein paar verschiedene Muster an, möchte aber Ihre DAL-Designstrategien erhalten. Es gibt so viele Möglichkeiten und Gründe, eine DAL in einer bestimmten Weise zu implementieren. Wenn Sie also bitte Ihre Strategie erklären könnten und warum sie am besten zu Ihnen passt, würde ich das sehr schätzen.
Vielen Dank im Voraus!
Edit: Lassen Sie mich erklären, warum NHibernate nicht funktioniert, da dies die unmittelbare Antwort scheint. Meine Benutzer erstellen einen "Job", der eigentlich nur eine vorübergehende Darstellung meiner Job-Klasse ist. In diesem Job geben sie eine oder eine Liste von Gewichtungsfaktoren an, die zum Zeitpunkt der Erstellung ebenfalls vorübergehend sind. Schließlich stellen sie eine Liste von Jobdetails bereit, denen ein bestimmter Gewichtungsfaktor zugeordnet ist. Weil, in der Datenbank, Gewichtsfaktoren einzigartig sind, wenn ich den Job bestehen bleibe und es Kaskaden hinunter zum Gewichtsfaktor es stirbt, wenn es einen doppelten Gewichtsfaktor findet. Ich habe versucht, einen Check auszuführen, bevor ich den Gewichtungsfaktor dem Detail zuwies (was ich nicht machen wollte, weil ich die zusätzlichen Aufrufe an die db nicht möchte), aber CreateCriteria in NH aufzurufen, verursacht auch einen Flush in der Session, entsprechend Fabio, der meinen Cache zerstört und damit die gesamte im Speicher befindliche Darstellung des Jobs zerstört. Leute auf der NH-Mailingliste sagten, ich sollte auf GUID umsteigen, aber das ist keine machbare Option, da der Konvertierungsprozess ein Albtraum wäre.
Welche Probleme haben Sie mit NHibernate? Ich benutze es mit Identität PKs die ganze Zeit ohne Problem. –
Hmm, vielleicht benutzt er lange laufende Sessions (Sitzung pro Geschäftstransaktionsmodell), und in einem solchen Ansatz wird die Verwendung der Identität abgeraten, da es die Arbeitseinheit zerstört (es muss direkt nach dem Einfügen einer neuen Entität gespült werden). Eine Lösung könnte darin bestehen, die Identität zu löschen und den HiLo Identity Generator zu verwenden. –
Ah ja, das ist eine Möglichkeit (und Ihre Lösung). –