Per qualche motivo il design sottostante non mi sta bene, ma non riesco a trovare un ragionamento articolato sul perché. Vorrei il tuo aiuto nel formulare un caso contro (o per) esso.
Supponiamo che il design di FooViewModel sia tale:
// Some Observables
Observable_1: bool
Observable_2: string;
// --- //
// The method where all the "logic" is dumped
godMethod() {
if (Singleton1.Status1 != DesiredStatus1) {
set_state_1();
return;
}
if (Singleton2.Status2 != DesiredStatus2) {
set_state_2();
return;
}
if (Observable_2.Value != "Desired String") {
set_state_3();
return;
}
set_state4();
}
// --- //
// In case of ANY external or internal event that may need the observables to change, just call the "godMethod"
externalEvent_Singleton1_Status1_Changed += () => {
godMethod();
}
externalEvent_Singleton2_Status2_Changed += () => {
godMethod();
}
Observable_2.Changed += () => {
godMethod();
}
// --- //
// Actual values of the observables are defined here
set_state_1() {
Observable_1 = false;
Observable_2 = "Status 1 is undesirable :(";
}
set_state_2() {
Observable_1 = false;
Observable_2 = "Status 2 is undesirable :(";
}
set_state_3() {
Observable_1 = false;
}
set_state_4() {
Observable_1 = true;
}
// --- //
Immagino che questo progetto, invece di definire la logica per ogni osservabile, definisca invece la logica per ogni "stato".
- Quali sono alcuni vantaggi / svantaggi di questo design?
- Quali possono essere alcune insidie di questo design?
- Può diventare un incubo di manutenzione?
My $ 0.02:
-
È molto difficile scoprire le dipendenze per gli osservabili semplicemente leggendo il codice:
- Supponiamo di voler capire quando Observable_1 è impostato su false.
- Il codice dovrebbe indicare:
- Se Status1 è non appropriato, OPPURE
- Se Status1 è appropriato E Se Status2 è non appropriato, OPPURE
- Se Status1 è appropriato E Se Status2 è appropriato AND Observable_2 è not appropriato
- Invece di limitarsi a definire (dichiarare?) che se uno qualsiasi di Status1, Status2 o Observable_2 è not appropriato.
- Vedi quanto può diventare complicato?
-
Il numero di "stati" può esplodere esponenzialmente.
-
Chiamare il metodo di dio dopo ogni azione fa semplicemente capolino; ma non sono in grado di indicare alcun principio specifico che questo modello vìola.
-
Penso che questo possa essere il modo "procedurale" di fare le cose, ed è il mio cervello che si lamenta di OOP; ma ancora, perché questo è oggettivamente inferiore / superiore?
Infine, per aggiungere, gli argomenti che ho sentito per questo design sono:
- Puoi guardare tutta la logica in un punto, che rende il codice più leggibile.
- Ogni volta che si verifica un evento, chiama semplicemente godMethod. Questo, presumibilmente, rende il codice più facile da scrivere e mantenere.