Ich bin nicht sicher, ob es ein Muster ist, die hier verwendet werden soll, aber hier ist die Situation:Design-Muster Frage für Wartbarkeit
ich eine Reihe von konkreten Klassen, die eine Schnittstelle implementieren:
public interface IPerformAction
{
bool ShouldPerformAction();
void PerformAction();
}
Ich habe eine andere Klasse, die die Eingabe überprüft, um festzustellen, ob ShouldPerformAction ausgeführt werden soll. Der Haken ist, dass neue Prüfungen ziemlich häufig hinzugefügt werden. Die Schnittstelle für die Prüfung Klasse wird wie folgt definiert:
public interface IShouldPerformActionChecker
{
bool CheckA(string a);
bool CheckB(string b);
bool CheckC(int c);
// etc...
}
Endlich habe ich zur Zeit die konkreten Klassen jeder der Checker-Methoden aufrufen mit den Daten spezifisch für diese konkrete Klasse:
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
}
}
Jetzt jedes Mal, Ich füge einen neuen Check hinzu, ich muss die konkreten Klassen umgestalten, um den neuen Check aufzunehmen. Jede konkrete Klasse übergibt der Prüfmethode andere Eigenschaften, so dass Unterklassen der konkreten Klassen keine Option sind. Irgendwelche Ideen, wie dies sauberer umgesetzt werden könnte?
Ich persönlich denke, Ihre aktuelle Methode ziemlich sauber ist. Wie viele konkrete Klassen reden wir? Ist es wirklich so schwierig, die notwendigen konkreten Klassen zu optimieren, wenn neue Prüfungen eintreffen? Ich denke, es spielt keine Rolle, wie du es zerschneidest, du wirst immer noch mit einer konkreten Klasse enden, die du anpassen musst. Die einzige Möglichkeit, dies zu vermeiden, ist eine "CheckAll()" -Stilfunktion, die irgendwo in den konkreten Klassen verwendet wird. Insgesamt denke ich, dass die erhöhte Leistung, nicht zwicken zu müssen, den Schlammfaktor nicht überwiegen wird. – mike