Die beste Methode, um Argumente im Konstruktor zu übergeben

8

Ich habe eine Klasse, die Zeilen im Tabellenlayout erstellt. Die Erstellung von Zeilen hängt von Daten und Metadaten ab. Da die Metadaten für jede Zeile gleich sind, z. B. Sichtbarkeitseigenschaften ein- / ausblenden, habe ich die Metadaten-Eigenschaft als statische Eigenschaft erstellt und initialisiere sie einmal mit initWidget von RowWidget .

nur Beispiel:

%Vor%

Dann habe ich unter Konstruktor für jeden Datensatz Daten aufgerufen.

%Vor%

Da ich dachte, das ist nicht richtig Ansatz. weil als Muster, wenn jemand diese Klasse dann sieht, wird es eine Zeile erstellen. Ich möchte nicht zuerst initWidget aufrufen. Ich möchte jeden erforderlichen Parameter im Konstruktor nur wie

übergeben %Vor%

Aber aufgrund dessen hat Konstruktor keine Argumente. und ich denke, es ist auch ein schlechtes Muster, 5+ Parameter im Konstruktor zu haben.

Sagt mir jemand:

  • Wie man eine Klasse konstruiert, die dieselbe Eigenschaft in einer anderen benötigt Instanz?

Hinweis : Ich weiß, dass dies nur durch statische Methoden möglich ist, aber nicht statisch sein soll.

  • Was ist der beste Weg, um eine Klasse mit einem Standard-Fix zu konstruieren? Eigenschaft für alle Instanzen?

Hinweis : Ich möchte keine andere Klasse erstellen, um dies zu erreichen. oder irgendeine Getter / Setter-Methode.

Danke im Voraus.

    
bNd 28.05.2013, 06:52
quelle

6 Antworten

1

Ich würde Builder-Muster vorschlagen. Sie benötigen eine zusätzliche Klasse, um RowWidget-Objekte zu erstellen. Also würde der Anruf so aussehen:

%Vor%

Hier ist eine schöne Erklärung des Musters: Ссылка

    
Jarosław Jaryszew 28.05.2013 08:45
quelle
0

Warum nicht eine Methode erstellen, die die newValues ​​für die Eigenschaften akzeptiert, die Sie ändern möchten & amp; Gibt eine neue Instanz der Klassen mit allen anderen Eigenschaften zurück, die von der Instanz kopiert wurden, auf der Sie diese Methode aufgerufen haben.

    
R Kaja Mohideen 28.05.2013 07:05
quelle
0

Sie könnten die Parameter aus der RowWidget -Klasse beispielsweise in einer RowWidgetConfig -Klasse trennen / extrahieren.

%Vor%

Erstellen Sie nun einmal eine Instanz dieser Klasse und übergeben Sie sie unter den anderen Parametern an RowWidget constructor.

Eine andere Alternative wäre factory zum Erstellen von RowWidget Instanzen. Die Factory enthält außerdem alle Parameter, die Sie für eine Zeileninstanz benötigen, sowie eine Factory-Methode createNewRowWidget , die eine Instanzbasis für die in der Factory enthaltenen Parameter erstellt.

%Vor%     
A4L 28.05.2013 07:08
quelle
0
  

Wie man eine Klasse konstruiert, die dieselbe Eigenschaft in einer anderen Instanz benötigt?

Um dies zu erreichen, können Sie eine Superklasse mit allen gewünschten Eigenschaften haben. Jede Klasse, die diese Superklasse erweitert, wird also diese Eigenschaften haben. Auf diese Weise müssen Sie static keyword nicht verwenden.

  

Was ist der beste Weg, eine Klasse mit einer Standard-Fix-Eigenschaft für alle Instanzen zu konstruieren?

Für diesen können Sie eine Schnittstelle mit einigen konstanten Eigenschaften haben. Auf diese Weise erhält jede Klasse, die diese Schnittstelle implementiert, die festen Eigenschaften.

    
me_digvijay 28.05.2013 07:06
quelle
0

Das statische initWidget () Ding scheint mir einfach nicht richtig zu sein. Obwohl Sie wahrscheinlich jetzt nur eine Menge RowWidget s haben, die einige Eigenschaften teilen, ist es auch sinnvoll, 2 Mengen RowWidget s zu haben, jede Menge hat ihre eigenen "shared" Eigenschaften. Die Dinge werden viel flüssiger und Sie haben viel mehr Möglichkeiten beim Aufbau vernünftiger APIs, wenn Sie Ihren Code umgestalten, um ein vernünftigeres Design zu erstellen.

Nehmen wir jetzt an, dass ich etwas wie eine RowGroup vorstelle (was die von Ihnen erwähnte "geteilte" Sache darstellt)

(Ehrlich gesagt, ich verstehe nicht ganz die Bedeutung für Ihr Design, ich mache es nur auf Basis Ihres Codes);

%Vor%

Wenn Leute es verwenden, sieht es ungefähr so ​​aus:

%Vor%

Sie können sogar Builder-ähnliche Syntax oder viele andere Optionen angeben.

%Vor%

Noch wichtiger, das Design macht jetzt mehr Sinn für mich.

    
Adrian Shum 28.05.2013 07:14
quelle
0

Wenn Sie keine andere Klasse erstellen wollten, würde ich vorschlagen, was A4L vorgeschlagen hat. Ohne eine andere Klasse zu erstellen, würde ich einen Konstruktor erstellen, der alle Parameter und die Factory-Methode verwendet, die die aktuelle Instanz als Vorlage verwendet, und ihre eigenen Parameter an den Konstruktorparameter übergibt.

Beispiel (mit offensichtlichen Teilen weggelassen)

%Vor%     
Alpedar 28.05.2013 08:41
quelle

Tags und Links