non sono sicuro se c'è un modello che deve essere utilizzato qui, ma qui è la situazione:design domanda modello per la manutenibilità
Ho un certo numero di classi concrete che implementano un'interfaccia:
public interface IPerformAction
{
bool ShouldPerformAction();
void PerformAction();
}
Ho un'altra classe che controlla l'input per determinare se ShouldPerformAction deve essere eseguito. Il problema è che i nuovi assegni vengono aggiunti abbastanza frequentemente. L'interfaccia per la classe controllo è definito come segue:
public interface IShouldPerformActionChecker
{
bool CheckA(string a);
bool CheckB(string b);
bool CheckC(int c);
// etc...
}
Infine Al momento ho le classi concrete chiamare ciascuno dei metodi controllo con i dati specifici per quella classe concreta:
public class ConcreteClass : IPerformAction
{
public IShouldPerformActionCheck ShouldPerformActionChecker { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public int Property3 { get; set; }
public bool ShouldPerformAction()
{
return
ShouldPerformActionChecker.CheckA(this.Property1) ||
ShouldPerformActionChecker.CheckB(this.Property2) ||
ShouldPerformActionChecker.CheckC(this.Property3);
}
public void PerformAction()
{
// do something class specific
}
}
Ora ogni volta Aggiungo un nuovo assegno, devo refactoring le lezioni concrete per includere il nuovo assegno. Ogni classe concreta trasmette proprietà diverse al metodo di controllo, quindi le sottoclassi delle classi concrete non sono un'opzione. Qualche idea su come questo potrebbe essere implementato in modo più pulito?
Personalmente penso che il metodo attuale è abbastanza pulito. Di quante lezioni concrete stiamo parlando? È davvero così difficile modificare le lezioni concrete necessarie quando arrivano nuovi assegni? Penso che non importa come lo tagli, finirai per finire con un corso concreto che devi modificare. L'unico modo per evitare ciò è di eseguire una funzione di stile "CheckAll()" da qualche parte utilizzata dalle classi concrete. Nel complesso, comunque, penso che l'aumento delle prestazioni di non dover modificare non supererà il fattore di fango. – mike