Hier ist die Situation: Ich habe eine Klasse, die zu viel macht. Es ist hauptsächlich für den Zugriff auf Konfigurationsinformationen, aber es hat auch die Datenbankverbindung. Es ist als Singleton implementiert, so dass auch Unit-Tests schwierig werden, da der meiste Code ziemlich eng damit verbunden ist. Dies ist noch problematischer, da es eine Import-Zeitabhängigkeit erzeugt (wir machen dies in Python), was bedeutet, dass bestimmte Module in einer bestimmten Reihenfolge importiert werden müssen. Idealerweise möchte ich beides in zwei Klassen aufteilen und es zu einem Nicht-Singleton machen.Was ist böser: ein unnötiger Singleton oder ein God Object?
Zum Glück hat sich mein Arbeitgeber der Tatsache erfreut, dass diese Art von Tests gut ist und ich erlaube mir, Änderungen wie diese vorzunehmen, wenn Code mehr testbar wird. Allerdings bezweifle ich, dass sie bereit sein werden, zu viel Zeit darauf zu verbringen. Und ich würde das lieber inkrementell beheben, anstatt zu versuchen, zu radikal zu sein.
Also, ich sehe drei Möglichkeiten hier:
- Pause des Konfigurationsobjekt in ein (Singleton) Konfigurationsobjekt und ein (nicht-Singleton) Datenbankobjekt. Dies würde mir erlauben, die Datenbank als Import-Zeit-Abhängigkeit zu entfernen.
- Machen Sie das Konfigurationsobjekt zu einem Nicht-Singleton und übergeben Sie es an Objekte, die es benötigen. Ich denke, dass dies unseren kurzfristigen Bedürfnissen besser gerecht wird, aber ich denke, dass es deutlich mehr Zeit in Anspruch nehmen würde.
- Tun Sie etwas, woran ich nicht gedacht hätte, was Sie in Ihrer Antwort vorschlagen. :-)
Also was mache ich?
Ich vermute, dass * ist * etwas, an das ich nicht gedacht hatte. Wenn man das Objekt aufbricht, wird es einfacher, das De-Singleton zu entfernen (wenn das ein Wort ist). –
Wie wäre es mit Desingulieren? –
oder vielleicht Pluralität? :-) –