Mein Entwurf enthält eine kleine Datenbankabstraktion, wobei ich jede Datenbank als Singleton (gut, ein object
) mit benutzerdefinierten Methoden auf der Datenbank für die paar Operationen, die der Code aufruft, implementieren (es ist hauptsächlich ein Log-Parser, der interessante Statistiken zu eine Datenbank).In Scala, wie würde ich einem Singleton einen Konstruktor geben?
Ich möchte die Singleton-Datenbank-Klassen, wenn möglich, so konstruieren, dass zur Laufzeit jeder mit Config-Werten konstruiert wird (und diese Werte bleiben für den Rest der Laufzeit des Programms konstant). Dies würde es mir erlauben, den Code auch besser zu testen (da ich die Datenbanken mit Mockito oder Ähnlichem verspotten kann).
Ich lerne immer noch nur Scala, aber es scheint, dass es keine Möglichkeit gibt, einen Konstruktor an ein Singleton anzuhängen, und würde mich über jeden Input zu diesem Problem freuen - gibt es einen besseren Weg, um das zu tun? Gibt es einen bevorzugten Weg, ein Singleton zu konstruieren?
Prost im Voraus für jede Hilfe.
Dank Verlängerung Haufen für die schnelle Antwort. Meine Sorge dabei ist, dass ich dem Konstruktor Argumente übergeben möchte. Wenn ich daran zurückdenke, merke ich, was für ein schmutziger Hack das ist. Ich muss mein Design überdenken. – frio
Ja, es ist ein Hack. Singletons sind ein globaler Zustand und der Punkt von Scala ist es, eine unsichtbare Parallelverarbeitung zu ermöglichen. Dies bedeutet, dass Sie keinen globalen Status haben können. – fishtoprecords
@friend, kann es wichtig sein, daran zu denken, dass der Objektkonstruktor (Körper) nicht ausgeführt wird, bis Sie auf das Objekt oder dessen Inhalt (Felder oder Methoden) verweisen, was Ihnen ein gewisses Maß an Kontrolle über die Konstruktion des Objekts gibt. –