Ich bin nicht ganz sicher, wie man diese Frage in einem Satz formuliert, so dass ich Schwierigkeiten hatte, vorherige Beiträge zu suchen. Dies kommt häufig für mich und ich würde gerne einen Konsens darüber, wie man es angehen.Wann ich den Zustand eines Objekts überprüfen soll, allgemeine OOP, Beispiel in C#
Angenommen, Sie haben zwei Klassen, ExampleClass
und ExampleClassManager
. ExampleClass
hat eine Update(Data data)
Methode, die von ExampleClassManager
aufgerufen wird. es will ExampleClass
kann jedoch in einem von zwei Zuständen, und im Enabled
Zustand sein, die data
, um es verarbeiten in Update
vergangen, und im Behinderten Zustand ist es nicht mit den data
überhaupt nichts tun.
Soll ich für den Staat in der ExampleClassManager
werden überprüft und nicht die data
überhaupt vorbei, wenn es deaktiviert ist, oder sollte ich die data
unabhängig und ignorieren es innerhalb ExampleClass
passieren?
Hier ist ein Codebeispiel, falls ich es nicht klar artikulieren würde.
public class ExampleClass {
public bool Enabled {
get;
set;
}
public void Update(Data data) {
if(Enabled) {
//do stuff with data
}
}
}
public class ExampleClassManager {
private List<ExampleClass> exampleClassList=new List<ExampleClass>();
public void UpdateList() {
foreach(ExampleClass exampleClass in exampleClassList) {
exampleClass.Update(data);
}
}
}
oder
public class ExampleClass {
public bool Enabled {
get;
set;
}
public void Update(Data data) {
//do stuff with data
}
}
public class ExampleClassManager {
private List<ExampleClass> exampleClassList=new List<ExampleClass>();
public void UpdateList() {
foreach(ExampleClass exampleClass in exampleClassList) {
if(exampleClass.Enabled) {
exampleClass.Update(data);
}
}
}
}
Nun, Fragen, die ich stellen würde, sind: A) Was passiert, wenn Sie eine deaktivierte 'ExampleClass'" aktualisiert ", dann diese Instanz aktiviert. Sollte es die Daten anzeigen, gegen die es gebunden war, bevor es deaktiviert wurde, oder sollte es die aktualisierten Daten anzeigen, die ihm bei seiner Deaktivierung zur Verfügung gestellt wurden? B) Ist der 'ExampleClassManager' _care_ ob 'ExampleClass' bei der Verteilung seiner Daten aktiviert ist? C) Erwarten Sie andere Implementierungen/Subklassen von 'ExampleClass', wo sie die Daten haben wollen oder andere" aktualisierbare "Konzepte haben, die sich ändern sollten, wenn sie" aktualisiert "sind, selbst wenn sie deaktiviert sind? –
Auch D) Soll der Aufruf von Code Updates auf deaktivierten 'ExampleClass' Instanzen erzwingen? In Ihrem zweiten Beispiel kann der Aufruf-Code _ignore_ die Tatsache, dass eine Instanz deaktiviert ist und Änderungen daran erzwingen. Der gesamte Code einer Klasse, die "Update" aufruft, muss dann diesen Vertrag "Ich aktualisiere mich nicht, wenn ich deaktiviert bin" erfüllen, ist aber unter keiner Verpflichtung dazu. –
Es hängt wirklich davon ab, wie wichtig die Verarbeitung der Eingabedaten ist. In diesem Szenario hat die 'ExampleClass' nicht ausgewählt, wie mit dem deaktivierten Zustand umzugehen ist, sondern es macht Clients diese Wahl. Du könntest dieses schlechte Design in Betracht ziehen. Es informiert Sie nicht, dass mit Ihrer Eingabe nichts passieren wird. Wenn die Verarbeitung Ihrer Daten durch 'ExampleClass' wichtig ist, sollten Sie nach diesem deaktivierten Zustand suchen. Wie reagieren Sie jedoch auf den entblößten Zustand? Eine Ausnahme auslösen? Ignorieren? Versuchen Sie eine andere Route? Etwas protokollieren? –