Zunächst einmal nur ein tieren oder das andere:
public string color { get; set; }
ODER
public string getColor
{
get
{
return color;
}
}
Sie mischen zwei Dinge hier hat man Unveränderlichkeit getColor
und der andere hat Wandelbarkeit color
Sie müssen also entscheiden, ob der Endbenutzer die Eigenschaft get
oder get and set
der Eigenschaft haben soll.
Zweitens wollen Sie die Farbe konvertieren, wenn Sie die Klasse instanziiert .... Das ist seltsam, denn wenn man die Klasse instanziiert, color
eine leere Zeichenfolge sein und haben keine Farbe.
Drittens, wenn Sie den Konstruktor verwenden, um eine Klasse neu zu erstellen und die Farbe in - wie so new Animal("blue")
- dann warum konvertieren Sie es, wenn Sie von der Eigenschaft erhalten, denn jetzt verdunkeln Sie die Funktion dieser Eigenschaft bis zum Ende Benutzer. Dies folgt nicht dem Prinzip des geringsten Erstaunens.
Also was Sie tun könnten, ist die Konvertierung weg von der Klasse abstrahieren, um es offensichtlicher zu machen.
class AnimalColorConverter
{
public void ConvertColor(Animal animal)
{
animal.color = colorConversion(animal.color);
}
private string colorConversion(input)
{
switch (input)
{
case "0":
return "Lighter";
case "1":
return "Good!";
case "2":
return "Darker";
default:
return "Fix this somehow!";
}
}
}
Dann würde Ihre Linien werden:
var converter = new AnimalColorConverter();
var animal = new Animal();
animal.color = "1";
converter.ConvertColor(animal);
Was Sie müssen auch prüfen, ist der Kürze halber nicht immer eine gute Sache ist, wenn Sie zu diesem Motto in 6 Monate Zeit zurückkommen, werden Sie verstehen, was es tut?
Endlich, wenn ich nicht verstanden habe, was deine Klasse zu tun versucht und es nicht perfekt beantwortet habe - das liegt daran, dass ich aus deinem Code nicht verstehen kann, was du erreichen willst, was auf die 6 Monate zurückgeht Problem. Wenn Sie Code schreiben, sollten Sie üben, Dinge genau zu benennen, was sie tun, und wenn der Name zu lang ist, versucht es zu viel zu tun (Trennung von Teilen der SOLID-Prinzipien).
Also von meinem Code habe ich eine Klasse AnimalColorConverter
, die fast in Bezug auf die Beschreibung der Funktion dieser Klasse ist. Dann habe ich eine Methode namens ConvertColor
, die auch ziemlich genau beschreibt, was diese Funktion tut. Ich könnte sie besser benennen, wenn ich wüsste, was "0"
in Ihrer switch
Erklärung darstellt.Ich nehme an, dass "Lighter"
eine Klasse der Farbe ist. So hätte ich meine Funktion ColorGrader
genannt und dann würde ich erwarten, dass die Farbe der Farbe herauskommt.
Die Methoden 'getColor' und' setColor' sind nicht notwendig - die Eigenschaft 'color' selbst hat bereits einen Getter und Setter. Außerdem ist das Ignorieren des gegebenen "Wertes" in einem Property Setter ... nicht das, was andere Programmierer erwarten würden. Ist eine Schnur wirklich der richtige Typ hier? '" Friday "' ist eine gültige Zeichenkette, aber es ist keine gültige Farbe ... Wie auch immer, warum muss 'Animal' von numerischen Zeichenketten in Farbnamen konvertiert werden - und welche Art von Beziehung besteht zwischen diesen Zahlen und Farbnamen ? –
Hoppla, danke, dass du sie eingefangen hast! :-) Der String-Typ ist, weil ich den String-Rückgabewert (einer Zahl) von einem API bekomme und ich es in einen String in einem anderen Format konvertieren muss. – wsgb