Non sono abbastanza sicuro di come pronunciare questa domanda in una frase, quindi ho avuto difficoltà a cercare i post precedenti. Questo succede spesso per me e mi piacerebbe avere un consenso su come affrontarlo.Quando controllare lo stato di un oggetto, OOP generale, esempio in C#
Supponiamo di avere due classi, ExampleClass
e ExampleClassManager
. ExampleClass
ha un metodo Update(Data data)
che viene chiamato da ExampleClassManager
. Tuttavia, ExampleClass
può essere in uno dei due stati, e nello stato Enabled
si vuole elaborare il data
passata ad essa in Update
, e nello stato disabilitato non fa nulla con il data
a tutti.
Dovrei controllare per lo stato nel ExampleClassManager
e non superato il data
affatto se è disabilitato, o forse dovrei passare il data
indipendentemente e ignorarlo all'interno ExampleClass
?
Ecco un esempio di codice nel caso in cui non lo articolassi chiaramente.
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);
}
}
}
o
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);
}
}
}
}
Bene, le domande che vorrei porre sono: A) Cosa succede se "Aggiornato" un 'EsempioClass' disabilitato, quindi abilitato quell'istanza. Dovrebbe mostrare i dati che erano vincolati a _before_ essere disabilitato, o dovrebbe mostrare i dati aggiornati che sono stati forniti quando è stato disabilitato? B) Il 'ExampleClassManager' _care_, indipendentemente dal fatto che' ExampleClass' sia abilitato durante la distribuzione dei suoi dati? C) Ti aspetti di avere altre implementazioni/sottoclassi di 'ExampleClass' dove dovresti desiderare i dati o avere altri concetti" aggiornabili "che dovrebbero cambiare quando" aggiornati "anche se disabilitati? –
Inoltre D) Vuoi chiamare il codice per forzare gli aggiornamenti sulle istanze 'ExampleClass' disabilitate? Nel secondo esempio, il codice chiamante può _ignore_ il fatto che un'istanza è disabilitata e impone modifiche su di essa. Tutto il codice di qualsiasi classe che chiama 'Update' deve quindi soddisfare questo contratto" non aggiornarmi se sono disabilitato ", ma non è obbligato a farlo _. –
Dipende davvero dall'importanza dell'elaborazione dei dati di input. In questo scenario, 'ExampleClass' non ha scelto come gestire lo stato disabilitato, piuttosto fa in modo che i client effettuino tale scelta. Potresti considerare questo cattivo design. Non ti informa che non accadrà nulla con il tuo contributo. Se l'elaborazione dei dati da parte di 'ExampleClass' è importante, è possibile controllare questo stato disabilitato. Tuttavia, come rispondi allo stato disattivo? Lanciare un'eccezione? Ignorare? Prova un'altra via? Registra qualcosa? –