Wo werden gemeinsame Methoden platziert?

9

Ich habe eine Reihe von Methoden, die überall verwendet werden. Im Moment heißt die Codedatei global, um die Tatsache darzustellen, dass sie ... tatsächlich ... global sind.

Das gefällt mir jedoch nicht.

Ich möchte diese in einer Klasse gruppieren und eine Schnittstelle weitergeben. Ich werde nur eine Instanz machen, aber ich falle hier nicht in die Singleton-Falle.

Was soll ich zuerst die Klasse nennen? Ich möchte den globalen Namen vermeiden, weil ich befürchte, dass die Betreuer die falsche Idee haben würden.

Wie sollte ich auch in Betracht ziehen, solche Methoden aufzuteilen, damit sich das Verhalten ändern und anpassen kann?

Die Methoden enthalten Dinge wie:

  • Umrechnungstabellen
  • Interaktion in der Zwischenablage
  • Verwaltete erstellte Schriftarten
  • Gängige Zeichenmethoden
  • Bereitstellung einer Schnittstelle mit Zugriff auf häufig verwendete Ressourcen
Lee Louviere
quelle
Sind dies reine Util-Methoden, die den Status nicht speichern, oder speichern sie den Status?
TheLQ
+1 für nicht in die Singleton-Falle fallen.
Caleb
@TheLQ Sie speichern nicht unbedingt den Status, enthalten jedoch zur Vereinfachung konstante Daten (wie Konvertierungsdiagramme).
Lee Louviere

Antworten:

4

Der Namespace könnte sein [application].Common.Shared

Klassen könnten benannt werden:

ConversionLookup
ClipboardCommunication
FontManager
DrawingUtility

Ich würde die Klassen aufteilen, weil es so klingt, als würden sie verschiedene Dinge tun.

Jon Raynor
quelle
1

Wenn Sie eine Instanz erstellen möchten, haben Sie so ziemlich einen Singleton. Das, worauf sich die Leute normalerweise beziehen würden, wenn sie über eine Singleton-Falle sprechen, ist, dass Singletons global sind und die meisten Klassen besser dran sind, nicht global zu sein. Sie könnten also genauso gut einen Singleton haben. Wenn Sie eine Schnittstelle vernünftigerweise an Objekte weitergeben können, die sie möglicherweise aufrufen möchten, ist sie nicht wirklich global.

Wenn Sie alles in einer Sammlung globaler Methoden zusammenfassen, ist es außerdem schwierig, das Verhalten zu ändern und anzupassen, da nicht nur für jede Änderung an einer Methode eine neue Unterklasse erforderlich ist, sondern für jede Kombination von Änderungen eine eigene Unterklasse erforderlich ist.

Ich würde empfehlen, Singletons für jeden zu haben, der wirklich global ist (ich nehme Ihr Wort, das sind sie alle), und eine Art Registrierung oder Factory, die Ihnen eine Instanz gibt (was bedeutet, dass Sie als Singleton implementieren können oder nicht, da die Schnittstelle dies tut keine Versprechungen machen). Ich würde sie basierend auf dem, was sie aus der Sicht des Anrufers tun, benennen.

psr
quelle
1

Normalerweise füge ich diese Art von Dingen in ihre eigenen Baugruppennamen wie "foo.Common" unter Namespaces wie "foo.Common.Collections" oder "foo.common.UI" usw. ein. Dann kann ich auf die Baugruppe in einem beliebigen Projekt verweisen Ich brauche sie.

Muad'Dib
quelle