Ich habe mir mit der nächsten Ausbaustufe doch ziemlich viel Zeit gelassen. Und dabei gab es nach außen hin relativ wenig zu tun. Zur Erinnerung: Ich wollte in meine Plattenverwaltung als nächstes das Bearbeiten bereits existierender Tonträger integrieren. Dazu musste ich einen Tonträger auswählen – habe ich schon für das Abspielen. Und dann brauchte ich die Maske, wo ich alle Daten zum Tonträger sehe – habe ich auch schon für das Anlegen. Wo sollte dann also das Problem sein?
Zum einen musste ich beide miteinander verknüpfen. Natürlich möglichst so, dass keiner den anderen kennt. Wie soll das gehen, wenn auch noch Daten ausgetauscht werden? Ich erfand eine Klasse, mit der ich Workflows abbilden kann. Die funktioniert nach dem einfachen Prinzip des Stacks, d.h. am Anfang werden alle nötigen Bearbeitungsschritte (in Form der Viewmodels) reingestopft und wenn ein Schritt fertig ist, dann schickt er eine Nachricht – je nachdem ob abgebrochen oder weitergearbeitet wird. Meine Workflow-Klasse hat sich für die Nachrichten registriert und dementsprechend wird die Bearbeitung des Stacks fortgesetzt oder abgebrochen. Den Nachrichtenmechanismus habe ich in dem Atemzug auch gleich mit eingebaut. Damit war es für mich sauberer Dateidialoge unabhängig vom Viewmodel zu öffnen. Das war jetzt auch nicht der unheimliche Aufwand.
Der ganze Aufwand wartete in der untersten Etage – da wo das Mapping zwischen den Datenobjekten und der Datenbank statt findet. Ich hatte bis jetzt eine Klasse die den ganzen Zugriff abgebildet hat. Mit über 600 Zeilen Code war die schon ziemlich unübersichtlich geworden. Also zerpflückte ich die Klasse nach den einzelnen Anforderungen: eine Klasse für das Abspielen, eine für die Charts, eine zum Anlegen von Tonträgern. Jetzt zerfiel das Ganze und es machte auch wieder mehr Spaß neue Funktionalität einzubauen. Da ich die gleichen Objekte zum Anlegen wie auch zum Editieren benutze, musste ich erstmal die Datenobjekte umbenennen und merzte in dem Zusammenhang auch noch eine Architekturschwäche aus: Alle Assemblys hatten eine Abhängigkeit in die Datenbankschicht, da dort die Datenobjekte definiert waren. Also lagerte ich diese gleich in ein neues Projekt aus. Kurz und gut – ich baute einmal das komplette Untergeschoss um.
Der neue Modus funktioniert fast gleich von Anfang an, weil ich viel vom Anlegen wiederverwenden konnte. Jetzt muss ich nur noch ein paar kleine kosmetische Korrekturen machen, dann kann ich mir Gedanken machen, was ich mir als nächstes vornehme. Am liebsten hätte ich eine Ansicht, die mir ein paar Statistiken u.a. zur Datenqualität liefert. Ich habe festgestellt, dass etliche Cover nicht übernommen wurden bzw. was sonst noch an Daten fehlt. Das wird dann wohl der nächste Schritt sein…