Designfrage - Klasse mit ausschließlich statischen Methoden
-
Hallo,
in meiner Applikation benutze ich das MVC-Modell. Zusätzlich habe ich ein Datenbank-Singleton welches mir Zugriff auf die Datenbank erlaubt.
Normalerweise kapselt ja das/die Model(s) den Datenbankzugriff, allerdings brauche ich ja quasi nur Funktionen die eigentlich nur den Datenbankzugriff über den Singleton sowie ein paar Argumente benötigen um die SQL-Queries zu kapseln.
Ich empfinde es momentan als mühselig dann immer erst das richtige Model-Objekt zu erstellen und darauf dann die Methoden anzuwenden.
Spricht etwas dagegen in meinen Model-Klassen die Methoden standardmäßig statisch zu machen und dann z.B. so UserModel::setNewPassword("user_id", "new_pass") darauf zuzugreifen? Oder kann ich mir damit langfristig designtechnisch ins Bein schießen?
-
Es spricht auch nichts gegen freie Methoden. Es wird nicht objektorientierter, wenn du stattdessen statische Methoden machst.
Allerdings finde ich das ganze Konzept irgendwie fragwürdig. Eine Datenbankverbindung als Singleton zu machen ist eine schlechte Idee. Haben wir auch in unserem Programm und es macht ständig Probleme. Als vor 10-15 Jahren die Datenbank eingeführt wurde, haben die Entwickler gesagt, ganz klar, wir werden immer nur die eine Datenbank brauchen. Tja, schaut 15 Jahre später schon etwas anders aus.
-
Mechanics schrieb:
Es spricht auch nichts gegen freie Methoden [...]
in einem Namespace.
-
Das Gesagte noch einmal in C++:
namespace Example { void setNewPassword(Database &, UserId const &, Password const &); }
-
Freie Methoden setzt man in C++ ab besten als freie Methoden um.
Das eigentliche Problem hier ist aber das Singleton.