MVC ist ein Pattern vom Typ Strukturmuster. Ich habe es um Commands erweitert, da sich auch diese gut eignen, um eine Anwendung zu strukturieren und so übersichtlich und durschschaubar zu entwerfen. Zudem bieten Commands noch einige andere Vorteile.
Ein oder mehrere Commands können vom Controller aufgerufen werden. Der Controller zählt zu den Pattern Strategie. Weil er eine Entscheidung trifft. if … then. Tatsächlich ist aber es der Entwickler, welcher den Ablauf und die Entscheidungen im Controller entwirft. Ist der Controller, oder sind dessen aufgerufene Prozeduren, nicht gut strukturiert, dann kann dies zu fehlerhaften Abläufen und Entscheidungen führen. Daher erstelle ich im Controller einen Client. Dieser führt Reihe Commands aus und enthält die Parameter, Resultate und auch Fehler. Der Controller wird dadurch schlanker und übersichtlicher.
Im Client werden die einzelnen Commands erzeugt und ausgeführt. Jedes erzeugte Command wird an eine Liste angefügt. Diese Liste kann in der Anwendung weitergegeben werden. Wie zum Auditing, um die Benutzerfreundlichkeit und Sicherheit der Anwendung zu verbessern. Auch wenn die ConcreteCommands unterschiedlich sind, können sie von diesem Interface in ihren konkreten Typ zurück konvertiert werden.
Die erforderlichen Werte und Verweise stelle ich zum Abrufen im Client bereit. Ob ich sie als Objekt zurückgebe, statt einem Boolean, dies überlege ich noch. Gut finde ich die übersichtliche Art, die Parameter zu setzen, Results abzurufen und weiter zu verwenden.
Die ConcreteCommands enthalten die Parameter und Results sowie Fehlermeldungen. Dort fange ich auch die Exceptions ab.
Die Struktur ist im Explorer ersichtlich. Actions führen die Prozeduren aus, welche die Results liefern, wie verschlüsselte Strings oder die Daten.
Für die Fehler habe ich ein Interface IError eingefügt. Die Liste übergebe ich im Controller bei einem Fehler an eine Klasse. In diesem Test werden die einzelnen Items der Liste vom Typ ICommand in den Typ IError konvertiert. Dann kann auf die Fehlermeldungen zugegriffen werden. Hier lasse ich mir diese nur als Debug-Meldung ausgeben. Aber es geht natürlich viel mehr.