Frage

Ich habe gerade selbst eine Klasse erstellen namens „InstructionBuilderFactoryMapFactory“. Das sind 4 „-Muster Suffixe“ auf eine Klasse. Es sofort erinnerte mich an diese:

http://www.jroller.com/landers/entry/the_design_pattern_facade_pattern

Ist das ein Design Geruch? Soll ich eine Grenze für diese Nummer verhängen?

Ich weiß, dass einige Programmierer für andere Dinge ähnliche Regeln (zum Beispiel nicht mehr als N Ebene des Zeiger indirection in C).

Alle scheinen die Klassen mir notwendig. Ich habe eine (feste) Karte von Strings in Fabriken - etwas, was ich die ganze Zeit tun. Die Liste wird immer lange, und ich will sie aus dem Konstruktor der Klasse bewegen, die die Erbauer verwendet (die von den Fabriken geschaffen werden, die von der Karte erhalten werden ...) Und wie üblich ich vermeiden Singletons.

War es hilfreich?

Lösung

Ich sehe es als Design-Geruch - es wird mir denken geben, wenn alle diese Abstraktionsebenen sind genug Gewicht ziehen

.

Ich kann nicht sehen, warum Sie eine Klasse nennen wollen ‚InstructionBuilderFactoryMapFactory‘? Gibt es andere Arten von Fabriken - etwas, das kein InstructionBuilderFactoryMap schafft? Oder gibt es andere Arten von InstructionBuildersFactories, die sie abgebildet werden muss?

Dies sind die Fragen, die Sie denken sollten, wenn Sie beginnen Klassen wie diese zu schaffen. Es ist möglich, nur all diese verschiedene Fabrik Fabriken aggregieren nur ein einziger und dann für die Erstellung von Fabriken verschiedene Methoden zur Verfügung stellen. Es ist auch möglich, nur jene Fabrik-Fabrik in einem anderen Paket geschnürt und ihnen einen prägnanten Namen geben. Denken Sie an alternativen Möglichkeiten dies zu tun.

Andere Tipps

Ein guter Tipp ist: Ihre Klasse öffentliche API (und das schließt seinen Namen) sollte Absicht offenbaren, nicht Implementierung. I (als Client) ist es egal, ob Sie den Erbauer oder die Fabrik Muster implementiert.

Nicht nur der Klassenname sieht schlecht aus, es sagt auch nichts darüber, was es tut. Es wird der Name auf der Grundlage ihrer Umsetzung und interne Struktur.

Ich habe selten einen Musternamen in einer Klasse verwenden, mit Ausnahme von (manchmal) Manufakturen.

Edit:

Haben Sie einen interessanten Artikel über Namensgebung auf Coding Horror, überprüfen Sie es bitte aus !

Viele Muster in einem Klassennamen ist definitiv ein Geruch, aber ein Geruch ist kein definitiver Indikator. Es ist ein Signal „für eine Minute zu stoppen und das Design zu überdenken“. Eine Menge Zeit, wenn Sie sich zurücklehnen und denken, eine klarere Lösung deutlich. Manchmal aufgrund der Einschränkungen bei der Hand (technische / Zeit / Mann Macht / etc) bedeutet, dass der Geruch soll jetzt ignoriert werden.

Wie für das spezifische Beispiel, ich glaube nicht, Anregungen aus der Erdnuss-Galerie sind eine gute Idee, ohne mehr Kontext.

Ich habe die gleiche Sache nachgedacht. In meinem Fall ist die Fülle von Fabriken, die durch „bauen für Testbarkeit“. Zum Beispiel habe ich einen Konstruktor wie folgt aus:

ParserBuilderFactoryImpl(ParserFactory psF) {
...
}

Hier habe ich einen Parser - die ultimative Klasse, die ich brauche. Der Parser wird durch Aufrufen von Methoden auf einem Baumeister gebaut. Die Erbauer (neu für jeden Parser, der gebaut werden muss) aus builder Fabrik erhalten.

Nun, was die h..l ist ParserFactory? Ach, ich bin froh, dass du gefragt! Um den Parser Builder Implementierung zu testen, muss ich seine Methode aufrufen und dann sehen, was für Parser erstellt wurde. Der einzige Weg, es w / o Brechen der Einkapselung der jeweiligen Parser-Klasse zu tun, dass der Bauherr schafft ist eine Schnittpunkt in Ordnung zu bringen, bevor der Parser erstellt wird, um zu sehen, was in den Konstruktor geht. Daher ParserFactory. Es ist nur eine Möglichkeit für mich, in einem Unit-Test zu beobachten, was an den Konstruktor eines Parsers geben wird.

Ich bin nicht ganz sicher, wie dieses Problem zu lösen, aber ich habe das Gefühl, dass wir besser dran, um Klassen vorbei sein würden lieber als Fabriken und Java täte besser, wenn es der richtigen Klassenmethoden nicht statisch Mitglieder haben könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top