Ich habe begonnen, etwas von einem Anti-Muster in meiner ASP.NET-Entwicklung zu bemerken. Es stört mich, weil es sich wie das Richtige anfühlt, um gutes Design zu erhalten, aber gleichzeitig riecht es falsch.
Das Problem ist folgendes: Wir haben eine mehrschichtige Anwendung, die unterste Schicht ist eine Klasse, die Anrufe an einen Dienst verarbeitet, der uns mit Daten versorgt. Darüber befindet sich eine Schicht von Klassen, die die Daten transformieren, manipulieren und überprüfen können. Darüber liegen die ASP.NET-Seiten.
In vielen Fällen müssen die Methoden der Dienstschicht nicht geändert werden, bevor sie in der Ansicht angezeigt werden, so dass das Modell einfach durchlaufen werden kann, z. B:
public List<IData> GetData(int id, string filter, bool check)
{
return DataService.GetData(id, filter, check);
}
Das ist nicht falsch und auch nicht unbedingt schlimm, aber es schafft eine seltsame Art von Copy/Paste-Abhängigkeit. Ich arbeite auch an dem zugrundeliegenden Dienst, der dieses Muster ebenfalls häufig wiederholt, und es gibt überall Schnittstellen. Was also passiert, ist: "Ich muss Folgendes hinzufügen int someotherID
a GetData
" Ich füge es also dem Modell, dem Dienstaufrufer, dem Dienst selbst und den Schnittstellen hinzu. Es hilft nicht, dass GetData
steht eigentlich stellvertretend für mehrere Methoden, die alle dieselbe Signatur verwenden, aber unterschiedliche Informationen zurückgeben. Die Schnittstellen helfen ein wenig bei dieser Wiederholung, aber sie taucht immer noch hier und da auf.
Gibt es einen Namen für dieses Anti-Muster? Gibt es eine Lösung, oder ist eine größere Änderung der Architektur die einzige wirkliche Möglichkeit? Es klingt, als müsste ich mein Objektmodell abflachen, aber manchmal führt die Datenschicht Transformationen durch, so dass sie einen Wert hat. Ich mag es auch, meinen Code zwischen "ruft einen externen Dienst" und "liefert Seitendaten" zu trennen.