Hallo!
Ich möchte einen Dateiexplorer programmieren. An den Grundlagen scheitert es nicht, jedoch habe ich noch einige Verständnisschwierigkeiten das ganze sinnvoll in Daten und in die Ansicht zu unterteilen. Mir fällt keine wirklich schöne Möglichkeit ein, das ganze zu unterteilen.
Hier erstmal meine Gedanken dazu:
In der Oberfläche möchte ich die Daten unterschiedlich darstellen können, also zB als Liste oder in Symboldarstellung. Dazu muss ich wie man sieht erstmal die anzuzeigenden Daten von der eigentlichen Darstellung trennen. Ich hätte vor in der Oberfläche mit nur einem File zu arbeiten, welches dann in der Adressleiste angezeigt wird. In der Liste würden dann die einzelnen Dateien, welche man mit listFiles() bekommt, angezeigt werden.
Ein Problem bei dieser Methode ist, dass es in Windows ja mehrere Laufwerke gibt, in Unix hingegen nur ein root-Verzeichnis. Diese bekommt man mit File.rootFiles() heraus, jedoch wäre das Problem das bei Windows die jeweiligen Laufwerke kein "Oberverzeichnis" haben. Ich hätte vor, der Ansicht immer den Pfad zu übergeben und mittels listFiles() sollten die einzelnen Dateien herausgeholt werden und in der Oberfläche dargestellt werden. Da die einzelnen Laufwerke natürlich kein Oberverzeichnis haben, also in dem zB C:, D:, etc. liegt, wäre dies dann so nicht möglich. Es könnte mit if-Bedienungen gearbeitet werden, dies ist aber denke ich eher schmutzig. Ich habe auch schon überlegt einfach von der File-Klasse abzuleiten und die einzelnen Methoden so zu überschreiben, das dann eben die Laufwerke als Kinder gelistet werden. Da man dann mit diesem praktisch nicht vorhandenen Oberverzeichnis nicht wirklich arbeiten darf (Dateien hineinkopieren, etc), müsste hier wieder mit vielen Bedienungen gearbeitet werden. Wieder keine wirklich schöne Lösung. Da ich zusätzlich vorhabe, ein weiteres sozusagen virtuelles File zu verwenden, in welchem frei definierbare Favoriten liegen, würde die Anzahl der Bedienungen nochmals steigen.
Ein weiteres Problem wäre, die einzelnen Dateioperationen zu implementieren. Eine Möglichkeit wäre, für die verschiedenen Dateioperationen eigene Klassen zu definieren, zB eine Klasse Copy, welcher die Quelldateien und der Zielordner übergeben wird und welche danach eben kopiert. Diese Klassen müssten aber wiederum eine Verbindung zu Oberfläche besitzen, da ich die Fortschritte in einem Dialog anzeigen möchte. Das könnte man mit Listenern machen, allerdings bräuchte man für jede Operation einen eigenen Listener und einen eigenen Dialog, da beim Löschen zB natürlich andere Informationen angezeigt werden müssen.
Ich hoffe meine Gedanken sind einigermaßen verständlich. Gibt es da elegantere Vorgehensweisen für meine Probleme? Ich finde meine Überlegungen eigentlich nicht sehr gut, allerdings fällt mir nicht wirklich etwas besseres ein. Ich vermute ich habe da sozusagen ein Brett vor dem Kopf, obwohl eine saubere Vorgehensweise gar nicht so weit entfernt wäre, kann mich allerdings auch damit täuschen.
Entschuldigung dass ich das frage, aber mir fällt auf das bei meinen meisten Projekten das Design sehr unsauber ist, allerdings eine nachträgliche Änderung ohne grobe Änderungen nicht durchführbar ist, und ich möchte lernen das ganze gleich von vorhinein einigermaßen sauber vorzugehen. Klar, man stößt immer wieder nachträglich auf Designfehler, nur sind diese meistens nicht so problematisch wenn das ganze auf einer soliden Grundlage aufbaut. In ein Anwendungsframework möchte ich mich bewusst nicht zwängen, ich will so etwas selbst sauber designen.
mfG
Arbon
Ich möchte einen Dateiexplorer programmieren. An den Grundlagen scheitert es nicht, jedoch habe ich noch einige Verständnisschwierigkeiten das ganze sinnvoll in Daten und in die Ansicht zu unterteilen. Mir fällt keine wirklich schöne Möglichkeit ein, das ganze zu unterteilen.
Hier erstmal meine Gedanken dazu:
In der Oberfläche möchte ich die Daten unterschiedlich darstellen können, also zB als Liste oder in Symboldarstellung. Dazu muss ich wie man sieht erstmal die anzuzeigenden Daten von der eigentlichen Darstellung trennen. Ich hätte vor in der Oberfläche mit nur einem File zu arbeiten, welches dann in der Adressleiste angezeigt wird. In der Liste würden dann die einzelnen Dateien, welche man mit listFiles() bekommt, angezeigt werden.
Ein Problem bei dieser Methode ist, dass es in Windows ja mehrere Laufwerke gibt, in Unix hingegen nur ein root-Verzeichnis. Diese bekommt man mit File.rootFiles() heraus, jedoch wäre das Problem das bei Windows die jeweiligen Laufwerke kein "Oberverzeichnis" haben. Ich hätte vor, der Ansicht immer den Pfad zu übergeben und mittels listFiles() sollten die einzelnen Dateien herausgeholt werden und in der Oberfläche dargestellt werden. Da die einzelnen Laufwerke natürlich kein Oberverzeichnis haben, also in dem zB C:, D:, etc. liegt, wäre dies dann so nicht möglich. Es könnte mit if-Bedienungen gearbeitet werden, dies ist aber denke ich eher schmutzig. Ich habe auch schon überlegt einfach von der File-Klasse abzuleiten und die einzelnen Methoden so zu überschreiben, das dann eben die Laufwerke als Kinder gelistet werden. Da man dann mit diesem praktisch nicht vorhandenen Oberverzeichnis nicht wirklich arbeiten darf (Dateien hineinkopieren, etc), müsste hier wieder mit vielen Bedienungen gearbeitet werden. Wieder keine wirklich schöne Lösung. Da ich zusätzlich vorhabe, ein weiteres sozusagen virtuelles File zu verwenden, in welchem frei definierbare Favoriten liegen, würde die Anzahl der Bedienungen nochmals steigen.
Ein weiteres Problem wäre, die einzelnen Dateioperationen zu implementieren. Eine Möglichkeit wäre, für die verschiedenen Dateioperationen eigene Klassen zu definieren, zB eine Klasse Copy, welcher die Quelldateien und der Zielordner übergeben wird und welche danach eben kopiert. Diese Klassen müssten aber wiederum eine Verbindung zu Oberfläche besitzen, da ich die Fortschritte in einem Dialog anzeigen möchte. Das könnte man mit Listenern machen, allerdings bräuchte man für jede Operation einen eigenen Listener und einen eigenen Dialog, da beim Löschen zB natürlich andere Informationen angezeigt werden müssen.
Ich hoffe meine Gedanken sind einigermaßen verständlich. Gibt es da elegantere Vorgehensweisen für meine Probleme? Ich finde meine Überlegungen eigentlich nicht sehr gut, allerdings fällt mir nicht wirklich etwas besseres ein. Ich vermute ich habe da sozusagen ein Brett vor dem Kopf, obwohl eine saubere Vorgehensweise gar nicht so weit entfernt wäre, kann mich allerdings auch damit täuschen.
Entschuldigung dass ich das frage, aber mir fällt auf das bei meinen meisten Projekten das Design sehr unsauber ist, allerdings eine nachträgliche Änderung ohne grobe Änderungen nicht durchführbar ist, und ich möchte lernen das ganze gleich von vorhinein einigermaßen sauber vorzugehen. Klar, man stößt immer wieder nachträglich auf Designfehler, nur sind diese meistens nicht so problematisch wenn das ganze auf einer soliden Grundlage aufbaut. In ein Anwendungsframework möchte ich mich bewusst nicht zwängen, ich will so etwas selbst sauber designen.
mfG
Arbon