Das Wichtigste an GUI-Code ist, dass er ereignisgesteuert ist und dass ereignisgesteuerter Code immer wie eine Masse zufällig organisierter Ereignishandler aussieht. Wenn Sie versuchen, nicht ereignisgesteuerten Code in die Klasse einzuschleusen, wird es sehr unübersichtlich. Sicher, es sieht so aus, als ob es Unterstützung für die Event-Handler bietet, und Sie können Ihre Event-Handler nett und klein halten, aber all dieser zusätzliche Support-Code lässt Ihre GUI-Quelle aufgebläht und chaotisch erscheinen.
Was können Sie dagegen tun und wie können Sie die Umgestaltung vereinfachen? Nun, ich würde zuerst meine Definition des Umgestaltens von etwas, das ich gelegentlich mache, in etwas ändern, das ich während des Codierens kontinuierlich mache. Warum? Weil Sie möchten, dass das Refactoring es Ihnen ermöglicht, Ihren Code einfacher zu ändern, und nicht umgekehrt. Ich bitte Sie nicht nur, die Semantik hier zu ändern, sondern stattdessen ein wenig mentale Calisthenics durchzuführen, um Ihren Code anders zu sehen.
Die drei Refactoring-Techniken, die ich am häufigsten verwende, sind Umbenennen , Methode extrahieren und Klasse extrahieren . Wenn ich nie ein anderes Refactoring gelernt hätte, würden diese drei es mir dennoch ermöglichen, meinen Code sauber und gut strukturiert zu halten, und nach dem Inhalt Ihrer Frage klingt es für mich so, als würden Sie wahrscheinlich die gleichen drei Refactorings in verwenden Um Ihren GUI-Code dünn und sauber zu halten.
Sie können die bestmögliche Trennung von GUI und Geschäftslogik in der Welt erzielen, und dennoch kann der GUI-Code so aussehen, als ob eine Code-Mine in der Mitte explodiert ist. Mein Rat ist, dass es nicht schadet, ein oder zwei zusätzliche Klassen zu haben, die Ihnen helfen, Ihre GUI richtig zu verwalten, und dies müssen nicht unbedingt Ihre View- Klassen sein, wenn Sie das MVC-Muster anwenden - obwohl Sie es häufig finden Die Zwischenklassen ähneln Ihrer Ansicht so sehr, dass Sie häufig den Drang verspüren, sie der Einfachheit halber zusammenzuführen. Ich gehe davon aus, dass es nicht wirklich schadet, eine zusätzliche GUI-spezifische Ebene hinzuzufügen, um die gesamte visuelle Logik zu verwalten. Wahrscheinlich möchten Sie jedoch die Vorteile und Kosten abwägen.
Mein Rat ist daher:
- Tun Sie nichts direkt hinter Ihrer GUI, außer aufzurufen und zu definieren, wie die GUI in die Ansicht (oder eine Zwischenebene) eingebunden wird.
- Versuchen Sie nicht, jede Ansicht in eine einzelne Klasse oder sogar eine einzelne Klasse pro GUI-Fenster zu zerlegen, es sei denn, dies ist für Sie sinnvoll. Alternativ können Sie viele kleine und einfach zu verwaltende Klassen erstellen, um Ihre GUI-Logik zu verwalten.
- Wenn Ihre Methoden anfangen, etwas größer als 4-5 Codezeilen auszusehen, prüfen Sie, ob dies erforderlich ist und ob es möglich ist, eine oder zwei Methoden zu extrahieren, damit Sie Ihre Methoden schlank halten können, auch wenn dies eine Klasse bedeutet mit viel mehr Methoden.
- Wenn Ihre Klassen sehr umfangreich aussehen, entfernen Sie zunächst ALLE duplizierten Funktionen und prüfen Sie dann, ob Sie Ihre Methoden logisch gruppieren können, sodass Sie eine oder zwei weitere Klassen extrahieren können.
- Denken Sie daran, jedes Mal, wenn Sie eine Codezeile schreiben, ein Refactoring durchzuführen. Wenn Sie eine Codezeile zum Laufen bekommen, prüfen Sie, ob Sie sie umgestalten können, um doppelte Funktionen zu vermeiden oder sie ein wenig schlanker zu gestalten, ohne das Verhalten zu ändern.
- Akzeptieren Sie das Unvermeidliche, dass Sie immer das Gefühl haben werden, dass sich der eine oder andere Teil Ihres Systems etwas aufgebläht anfühlt, besonders wenn Sie das Refactoring auf Ihrem Weg vernachlässigen. Selbst mit einer gut faktorisierten Codebasis haben Sie immer noch das Gefühl, dass Sie noch mehr tun können. Dies ist die Realität beim Schreiben von Software, bei der Sie immer das Gefühl haben, dass mehr "besser" getan werden könnte. Daher müssen Sie ein Gleichgewicht zwischen professioneller Arbeit und Vergoldung finden.
- Akzeptieren Sie, dass der Code umso weniger aufgebläht erscheint, je sauberer Sie versuchen, Ihren Code zu behalten.