Einzelnen Beitrag anzeigen

r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#12

AW: [ORM] Lazy Loading - Wie implementieren?

  Alt 23. Sep 2011, 18:04
1. Sorry, ich bin kein studierter Informatiker – was heißt „Persistenz orthogonal zur Geschäftslogik“?
Normalerweise sollte eine Klasse nur eine Aufgabe haben (Single Responsibility Principle) oder anders ausgedrückt: verschiedene Aufgaben sollten auch verschiedene Klassen aufgeteilt werden (Separation Of Concerns). Das sind grundlegende Prinzipien der Softwareentwicklung, die helfen Software wartbar zu machen. Man kann so leicht Teile austauschen, ändern und wiederverwenden ohne dabei unnötigen Aufwand zu haben und unnötig Fehler zu produzieren.

So sollte also die Persistenz (das Speichern in der DB) unabhängig von der eigentlichen Programmlogik sein (das nennt man Orthogonalität). im Idealfall steht in den Klassen die gespeichert werden sollen gar kein Code, der sich ums Speichern kümmert. Das Speichern steht in einer anderen Klasse, die jedes beliebige Objekt speichern kann.

Nicht immer ist Orthogonalität einfach zu erreichen, aber es hat ja auch niemand behauptet Softwareentwicklung wär immer nur einfach.

Zitat:
2. Normal lässt man bei ORMs den Code doch eh generieren, da kann man doch den Getter ohne Probleme einbauen.
Wenn man drum herum kommen kann, verzichtet man lieber aufs generieren. Es ist ein zusätzlicher Schritt, der den build-Prozess verkompliziert und damit fehleranfällig macht. Manchmal ist das Generieren von Code aber der schlauere Weg, weil man dadurch ganz andere Fehlerquellen vermeidet. Es ist eben eine Abwägungssache.

Zitat:
3. Was ist daran unsauber?
Die fehlende Orthogonalität.

[
Ich weiß nicht was mit Delphi möglich ist, NHibernate, mit dem ich gerade arbeite, implementiert die Proxies als zur Laufzeit erzeugte Ableitung der Entity.
Das ist das, was ich meine. In Java gibt es eine proxy-Klasse, die zur Laufzeit beliebige Interfaces implementieren kann. Die wird u.a. für RMI verwendet um die Stubs/Proxys zu erzeugen und ich vermute mal Hibernate benutzt das auch.


mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat