Zuallererst ist das von Ihnen bereitgestellte Beispiel nicht unglaublich ineffizient. es ist nur wenig ineffizient; seine ineffizienz liegt unter dem wahrnehmbaren niveau. Aber fahren wir auf jeden Fall mit der Frage fort.
So wie ich es verstehe, meinen wir , wenn wir von der Trennung von UI und Logik sprechen , die Vermeidung von enger Kopplung .
Eine enge Kopplung bezieht sich auf die Situation, in der die Benutzeroberfläche die Logik kennt (und aufruft) und die Logik die Benutzeroberfläche kennt (und aufruft). Um eine enge Kopplung zu vermeiden, muss nicht auf die vollständige Aufhebung der Kopplung zurückgegriffen werden. (Das scheint Ihr Ziel zu sein, indem Sie die Schnittstelle zwischen ihnen bis zu einer Zeichenfolgenschnittstelle mit dem geringsten gemeinsamen Nenner zerstören.) Alles, was Sie tun müssen, ist, eine lose Kopplung zu verwenden .
Lose Kopplung bedeutet, dass A B kennt, B jedoch nicht A. Mit anderen Worten, die beiden beteiligten Parteien spielen unterschiedliche Client- und Serverrollen , wobei der Client den Server kennt, der Server den Client jedoch nicht.
Im Fall von Benutzeroberfläche und Logik ist meiner Meinung nach die beste Möglichkeit, dies zu arrangieren, die Logik als Server und die Benutzeroberfläche als Client zu betrachten. Die Benutzeroberfläche ist also für die Logik konzipiert, kennt die Logik und ruft die Logik auf, während die Logik nichts über die Benutzeroberfläche weiß und einfach auf die empfangenen Anforderungen antwortet. (Und diese Anfragen kommen zufällig von der Benutzeroberfläche, aber die Logik weiß das nicht.)
Praktischer ausgedrückt, sollten Sie nirgendwo in den Quellcodedateien der Logik Include- / Import- / Using-Anweisungen finden, die sich auf UI-Dateien beziehen, während die Quellcodedateien der UI voll von Include- / Import- / Using-Anweisungen sind Anweisungen, die sich auf Logikdateien beziehen.
Um auf Ihren Fall zurückzukommen, es ist absolut nichts falsch daran, dass der UI-Code, der das Kombinationsfeld ausfüllt, über die Hamburger-Klasse Bescheid weiß. Es würde ein Problem geben, wenn die Hamburger-Klasse etwas über Combo-Boxen wüsste.
Übrigens erlaubt dieses Design eine andere Sache, die Sie von einem solchen System erwarten sollten: Es sollte möglich sein, beliebig viele verschiedene Benutzeroberflächen an die Logik anzuschließen, und das Ganze sollte immer noch funktionieren.