2017-06-06 7 views
0

Ich habe eine Klasse A, die 23 Eigenschaften hat, wie ich diese Zahl zu groß fand, nahm ich einige von ihnen aus und gruppiert sie in einer anderen Klasse B, die ich in der Klasse A eingebettet, aber A hat immer noch 17 Eigenschaften.OOP Design: Was sind die besten Praktiken in Bezug auf die Anzahl der Eigenschaften einer Klasse?

Mein Problem ist, dass ich nicht mit zu vielen eingebetteten Klassen enden möchte, daher ist meine Frage, was sind die Best Practices in solchen Situationen und welche Anzahl/Eigenschaften muss man in einer Klasse haben?

+0

Zumindest geben Sie einen Kommentar, warum dies nach unten bewegt wird? –

+1

Absolut richtig, ich denke Downwobner, die keine Kommentare hinterlassen, sind Leute, die das Gute sowieso nicht mögen. Du bist jetzt gut ;-). – mohsenmadi

Antwort

1

Ich denke, dass Sie das Prinzip der einfachen Verantwortung befolgen sollten.

Überprüfen Sie im Grunde, ob Ihre Klasse nur ein "Ding" darstellt/handhabt. Wenn dies nicht der Fall ist, teilen Sie es in verschiedene Klassen auf.

Es ist absolut nichts falsch daran, viele Eigenschaften/Felder zu haben, aber überlegen Sie, ob jedes Feld/jede Eigenschaft benötigt wird oder nicht. Angenommen, Sie führen ein Anmeldesystem aus, und jeder Benutzer verfügt über eine E-Mail-Adresse und ein Kennwort. Sie benötigen wahrscheinlich keine age oder favouriteFood -Eigenschaft in der Klasse User.

In Bezug darauf, ob Zeug in kleinere Klassen gruppiert werden soll oder nicht. TU ES! Genau dafür eignen sich die Klassen - Daten gruppieren.

Außerdem sehen Sie ein Muster in Ihrem Eigenschaftsnamen wie name1, name2, name3, name4 etc? Wenn Sie so etwas sehen, ist es wahrscheinlich besser, stattdessen ein Array namens names zu verwenden!

+0

Danke, deine Antwort hat es mir klar gemacht. Ich glaube, ich bin auf dem richtigen Weg. –

+0

@ElSam Wenn Sie meinen, dass meine Antwort Ihre Frage beantwortet, denken Sie bitte daran, sie zu akzeptieren! – Sweeper

1

Es ist in Ordnung für eine Klasse viele Eigenschaften zu haben, vorausgesetzt, dass sie alle auf die enthaltenden Klasse verknüpft sind, von einem primitiven Typ (beispielsweise String, Integer, Boolean ...). Es ist auch in Ordnung, dass einige dieser Eigenschaften zu einer eigenen Klasse zusammengefasst werden (z. B. Adresseigenschaften in Adresse), die Sie dann in die aggregierende Klasse einbetten. Von deinem Beitrag aus konnte ich dir nur Ratschläge geben.

+0

Genau das habe ich getan, ich hatte einige Eigenschaften primitiver Art und gruppierte sie in ihre eigene Klasse, die ich dann in meine Aggregationsklasse einbettete. –

+0

Die natürliche Sache zu tun - keine Sorgen. Das ist der Grund, warum eine Datenbank manchmal 10s und 10s oder Eigenschaften hat, und in der 3. Normalform, damit es dir gut geht. Wie/akzeptiere die Antwort, wenn nützlich. – mohsenmadi

2

Was mehr zählt als eine genaue Zahl, ist, dass Ihre Klasse einen hohen Zusammenhalt hat.

Hohe Kohäsion bedeutet, dass die Variablen Ihrer Klasse oft in Kombination miteinander verwendet werden. Wenn $ foo nur in einer Methode verwendet wird und $ bar nur in einer anderen Methode verwendet wird, hat die Klasse mit $ foo und $ bar eine geringe Kohäsion und Ihr Code könnte davon profitieren, dass er in separate Klassen umgeformt wird.

Verwandte Themen