Seite 2 von 2
Re: was macht sessionmaker()
Verfasst: Mittwoch 21. Januar 2015, 22:27
von pillmuncher
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.
YAGNI.
Re: was macht sessionmaker()
Verfasst: Freitag 23. Januar 2015, 22:36
von MoonKid
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!
Re: was macht sessionmaker()
Verfasst: Freitag 23. Januar 2015, 23:10
von BlackJack
@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:
“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
Irgendwas sinnfreies da reinzubasteln nur weil man's kann und weils nicht weiter stört ist kein Perfektionismus.
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.