Ich habe gelesen, dass ein Projektentwurf, der auf Komponenten, die immer Subkomponenten benutzen nicht vorteilhaft ist, da die Abhängigkeiten sich so schwerer elementieren lassen. Glaube das nannte sich "Top-Down-Prinzip".
Da wäre es vorteilhafter, einen Code zu verwenden, in der sich quasi ein Controller (z. B. am Anfang die main) durch das Programm "schlängelt" und die Komponenten durch Observation und Methodenaufruf vernetzt. Aber steht das nicht im Gegensatz zum Verstecken von Informationen-Prinzip? Falls ein Objekt z. B. Container (viewport) hat, wäre es möglich, dass diesen der Controller getViewport() holt und einen Container hinzufügt. Da die Informationen aber möglichst in der Klasse behalten werden sollten wäre es besser so etwas wie install(Container) zu verwenden, welches den Container am Frame hinzufügt. Dadurch könnte install auch generisch werden, falls das Interface der Klasse eine portierte Subklasse für irgend etwas anderes bekommen soll. Aber dadurch würde wieder die Wiederverwendbarkeit der Klasse leiden, da install immer auf die selbe Art hinzufügen würde. Eine Änderung von z. B. BorderLayout.NORTH auf BorderLayout.SOUTH wäre nicht möglich. Das könnte durch Vererbung gelöst werden, aber dann würde es das Liskovschen Substitutionsprinzip verletzten, da sich die Subklasse nicht mehr wie ihre Superklasse verhalten würde. Ein Controller könnte mit getViewport hinzufügen wie er wolle.
Im Endeffekt: Je mehr Regeln ich zum Design (wohl mein größtes Problem) lese, umso mehr habe ich das Gefühl, dass sich die Regeln irgendwie gegenseitig widersprechen. Aber vielleicht bin ich auch einfach nur blind. :bahnhof:
Da wäre es vorteilhafter, einen Code zu verwenden, in der sich quasi ein Controller (z. B. am Anfang die main) durch das Programm "schlängelt" und die Komponenten durch Observation und Methodenaufruf vernetzt. Aber steht das nicht im Gegensatz zum Verstecken von Informationen-Prinzip? Falls ein Objekt z. B. Container (viewport) hat, wäre es möglich, dass diesen der Controller getViewport() holt und einen Container hinzufügt. Da die Informationen aber möglichst in der Klasse behalten werden sollten wäre es besser so etwas wie install(Container) zu verwenden, welches den Container am Frame hinzufügt. Dadurch könnte install auch generisch werden, falls das Interface der Klasse eine portierte Subklasse für irgend etwas anderes bekommen soll. Aber dadurch würde wieder die Wiederverwendbarkeit der Klasse leiden, da install immer auf die selbe Art hinzufügen würde. Eine Änderung von z. B. BorderLayout.NORTH auf BorderLayout.SOUTH wäre nicht möglich. Das könnte durch Vererbung gelöst werden, aber dann würde es das Liskovschen Substitutionsprinzip verletzten, da sich die Subklasse nicht mehr wie ihre Superklasse verhalten würde. Ein Controller könnte mit getViewport hinzufügen wie er wolle.
Im Endeffekt: Je mehr Regeln ich zum Design (wohl mein größtes Problem) lese, umso mehr habe ich das Gefühl, dass sich die Regeln irgendwie gegenseitig widersprechen. Aber vielleicht bin ich auch einfach nur blind. :bahnhof: