YAGNI.MoonKid hat geschrieben:ich möchte sqlalchemy als Biblitothek selbst auch kapseln. Wenn ich später sqlalchemy austauschen will, muss ich das nur in der einen Datenbankklasse tun. Der Rest des Codes bleibt unberührt.
was macht sessionmaker()
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
In specifications, Murphy's Law supersedes Ohm's.
YAGNI
Ja, das Konzept ist mir ein Begriff. Ich entwickle aber nicht unter einem Chef und für einen Kunden. Das bedeutet, ich kann mir ein gewisses Maß an Perfektionismus erlauben.
Ich sehe kein großes Problem darin, die "Funktionalität" der Datenbank bzw. der Datenschicht in einer eigenen Klasse zu kapseln. Dadurch wird der Code nicht merklich komplexer und fehleranfälliger. Er wird dafür jedoch wartungsfreudiger, da die Schichten klarer getrennt sind.
Wo sollte ich den ein Session und Engine Objekt sonst hintun? In den "globalen" Namensraum oder "modul-global"? Nö, das Thema hatten wir schon!
Ja, das Konzept ist mir ein Begriff. Ich entwickle aber nicht unter einem Chef und für einen Kunden. Das bedeutet, ich kann mir ein gewisses Maß an Perfektionismus erlauben.
Ich sehe kein großes Problem darin, die "Funktionalität" der Datenbank bzw. der Datenschicht in einer eigenen Klasse zu kapseln. Dadurch wird der Code nicht merklich komplexer und fehleranfälliger. Er wird dafür jedoch wartungsfreudiger, da die Schichten klarer getrennt sind.
Wo sollte ich den ein Session und Engine Objekt sonst hintun? In den "globalen" Namensraum oder "modul-global"? Nö, das Thema hatten wir schon!
@MoonKid: Also wenn ich das richtig verstanden habe beschwerst Du Dich das `sessionmaker()` eine überflüssige Indirektion ist deren Sinn du nicht siehst, verteidigst aber im gleichen Atemzug deine überflüssige Indirektion.
Das mit der Perfektion hast Du nicht richtig verstanden:
Was zum Henker willst Du denn da noch mehr trennen? SA ist doch selbst schon eine Schicht um von der Datenbank zu abstrahieren. Die Datenschicht besteht doch dann in der Regel aus ORM-Klassen.
Hatten wir das Thema mit `Session` so schon? Das Ergebnis von `sessionmaker()` ist eine Klasse. Genau wie das Ergebnis von `deklarative_base()`. Diese Klassenobjekte gehören auf Modulebene. Du musst einfach nur damit klar kommen das Klassen in Python a) Objekte sind und b) zur Laufzeit dynamisch erzeugt werden. Ob das nun durch die Ausführung einer ``class``-Anweisung oder durch einen Funktionsaufruf passiert ist egal.
Das mit der Perfektion hast Du nicht richtig verstanden:
Irgendwas sinnfreies da reinzubasteln nur weil man's kann und weils nicht weiter stört ist kein Perfektionismus.“A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”
-- Antoine de Saint-Exupéry
Was zum Henker willst Du denn da noch mehr trennen? SA ist doch selbst schon eine Schicht um von der Datenbank zu abstrahieren. Die Datenschicht besteht doch dann in der Regel aus ORM-Klassen.
Hatten wir das Thema mit `Session` so schon? Das Ergebnis von `sessionmaker()` ist eine Klasse. Genau wie das Ergebnis von `deklarative_base()`. Diese Klassenobjekte gehören auf Modulebene. Du musst einfach nur damit klar kommen das Klassen in Python a) Objekte sind und b) zur Laufzeit dynamisch erzeugt werden. Ob das nun durch die Ausführung einer ``class``-Anweisung oder durch einen Funktionsaufruf passiert ist egal.