Noch ne Designfrage
Verfasst: Montag 11. September 2017, 12:49
Servus!
Ich habe ein Design-Problem, bei dem ich feststecke und ohne Hilfe nicht weiter komme. Hintergrund ist immernoch mein Arbeitszeit-Verwaltungsprogramm, Details hier.
Es geht um die saubere Gestaltung von GUI Code, konkret eines tk.Canvas Objekts mit diversen Items darauf, die miteinander interagieren und weitere Aktionen bedingen. Knackpunkt ist dabei m.E., dass die Canvas items sich nicht besonders gut als eigenständige (Unter)klassen modellieren lassen, da sie einerseits ohne das Canvas Objekt nichts selbst können, andererseits aber miteinander öfters in Verbindung stehen. Eine einzige Canvas-Klasse, welche die Items als Attribute und die entsprechenden Aktionen als Methoden nimmt, wäre naheliegend, aber in der Praxis völlig untauglich. Die Klasse wird riesig und völlig unlesbar.
Zum besseren Verständnis ein grober Überblick, was ich mir gedacht habe:
Es gibt eine Arbeitsfläche (= tk.Canvas Objekt)
Auf dieser Arbeitsfläche gibt es – grob gesagt – zwei Bereiche: links steht eine Liste mit Jobbzeichnungen, rechts ein Raster/Tabelle.
Jedes Feld im Raster steht für ein Zeitfenster von 15 Minuten an einem Datum, das der User setzen kann (Default=heute)
Der Nutzer kann nun einen Job aus der Liste per Drag-and-Drop über ein Feld ziehen. Damit setzt er eine Verbindung zwischen diesem Job und dem jeweiligen Zeitfenster, die später in einer Datenbank gespeichert wird.
Dieser Prozess ist von einer Reihe graphischen bling-blings begleitet: fährt der Nutzer mit der Maus über einen Job aus der Liste, wird dieser blau hinterlegt (die Schrift wird weiß); fährt der Nutzer mit einem ausgewählten Job (also mit gedrückter linker Maustaste) über ein Feld im Raster, wird dieses mit einem blauen Rahmen versehen; legt er einen Job in einem Feld ab, wird dieses grün gefüllt und der Job wird in das Kästchen geschrieben.
Die verwendeten Canvas-Items sind hauptsächlich Text-items und rectangles
Bislang habe ich drei Klassen erstellt: eine Tabellen-Klasse, eine Rechteck-Klasse und eine Jobs-Klasse. Die Tabellenklasse fungiert als Steuerungsklasse, wird dadurch aber schon wieder ziemlich umfangreich. Außerdem finde ich das ganze Konzept ziemlich umständlich.
Das Modellierungsproblem besteht nun darin, dass hauptsächlich für die graphischen Hervorhebungen und die Verbindung zwischen Kästchen bzw. diesem zugeordneter Zeit und dem Job/Text-Item direkte Abhängigkeiten bestehen. Also entweder ich hole mir eine mords umständliche Steuerklasse oder ich produziere total unübersichtliche Abhängigkeiten zwischen den einzelnen Klassen…
Wie würdet ihr an so ein Problem herangehen? Gibt es bestimmte Entwurfsmuster, die hier besser als andere greifen? Hilfe…das Zeug funktioniert schon in der dritten unterscheidlichen Version einwandfrei, aber keine Version erscheint mir bisher designtechnisch auch nur ansatzweise vertretbar.
PS: ich poste bei Bedarf gerne den bisherigen Code, habe aber bisher bewusst darauf verzichtet, da ich den "Blick von Außen" auf das Problem nicht verstellen wollte.
Ich habe ein Design-Problem, bei dem ich feststecke und ohne Hilfe nicht weiter komme. Hintergrund ist immernoch mein Arbeitszeit-Verwaltungsprogramm, Details hier.
Es geht um die saubere Gestaltung von GUI Code, konkret eines tk.Canvas Objekts mit diversen Items darauf, die miteinander interagieren und weitere Aktionen bedingen. Knackpunkt ist dabei m.E., dass die Canvas items sich nicht besonders gut als eigenständige (Unter)klassen modellieren lassen, da sie einerseits ohne das Canvas Objekt nichts selbst können, andererseits aber miteinander öfters in Verbindung stehen. Eine einzige Canvas-Klasse, welche die Items als Attribute und die entsprechenden Aktionen als Methoden nimmt, wäre naheliegend, aber in der Praxis völlig untauglich. Die Klasse wird riesig und völlig unlesbar.
Zum besseren Verständnis ein grober Überblick, was ich mir gedacht habe:
Es gibt eine Arbeitsfläche (= tk.Canvas Objekt)
Auf dieser Arbeitsfläche gibt es – grob gesagt – zwei Bereiche: links steht eine Liste mit Jobbzeichnungen, rechts ein Raster/Tabelle.
Jedes Feld im Raster steht für ein Zeitfenster von 15 Minuten an einem Datum, das der User setzen kann (Default=heute)
Der Nutzer kann nun einen Job aus der Liste per Drag-and-Drop über ein Feld ziehen. Damit setzt er eine Verbindung zwischen diesem Job und dem jeweiligen Zeitfenster, die später in einer Datenbank gespeichert wird.
Dieser Prozess ist von einer Reihe graphischen bling-blings begleitet: fährt der Nutzer mit der Maus über einen Job aus der Liste, wird dieser blau hinterlegt (die Schrift wird weiß); fährt der Nutzer mit einem ausgewählten Job (also mit gedrückter linker Maustaste) über ein Feld im Raster, wird dieses mit einem blauen Rahmen versehen; legt er einen Job in einem Feld ab, wird dieses grün gefüllt und der Job wird in das Kästchen geschrieben.
Die verwendeten Canvas-Items sind hauptsächlich Text-items und rectangles
Bislang habe ich drei Klassen erstellt: eine Tabellen-Klasse, eine Rechteck-Klasse und eine Jobs-Klasse. Die Tabellenklasse fungiert als Steuerungsklasse, wird dadurch aber schon wieder ziemlich umfangreich. Außerdem finde ich das ganze Konzept ziemlich umständlich.
Das Modellierungsproblem besteht nun darin, dass hauptsächlich für die graphischen Hervorhebungen und die Verbindung zwischen Kästchen bzw. diesem zugeordneter Zeit und dem Job/Text-Item direkte Abhängigkeiten bestehen. Also entweder ich hole mir eine mords umständliche Steuerklasse oder ich produziere total unübersichtliche Abhängigkeiten zwischen den einzelnen Klassen…
Wie würdet ihr an so ein Problem herangehen? Gibt es bestimmte Entwurfsmuster, die hier besser als andere greifen? Hilfe…das Zeug funktioniert schon in der dritten unterscheidlichen Version einwandfrei, aber keine Version erscheint mir bisher designtechnisch auch nur ansatzweise vertretbar.
PS: ich poste bei Bedarf gerne den bisherigen Code, habe aber bisher bewusst darauf verzichtet, da ich den "Blick von Außen" auf das Problem nicht verstellen wollte.