Перш за все, наведений вами приклад не є надзвичайно неефективним; її лише трохи неефективна; її неефективність нижче відчутного рівня. Але, у будь-якому випадку, давайте перейдемо до питання.
Наскільки я це розумію, коли ми говоримо про розділення інтерфейсу користувача та логіки , ми маємо на увазі уникнення тісного зв'язку .
Тісне з'єднання означає ситуацію, в якій інтерфейс користувача знає (і використовує) логіку, а логіка знає (і викликає) інтерфейс користувача. Щоб уникнути тісної зв'язку, не потрібно взагалі вдаватися до скасування зчеплення. (На це, начебто, ви прагнете, зруйнувавши інтерфейс між ними аж до рядкового інтерфейсу найменшого загального знаменника.) Все, що потрібно зробити, - це використовувати нещільне з'єднання .
Вільне з'єднання означає, що A знає B, але B не знає А. Іншими словами, дві залучені сторони грають різні клієнтські та серверні ролі, де клієнт знає сервер, але сервер не знає клієнта.
Що стосується інтерфейсу користувача та логіки, найкращий спосіб упорядкувати це, на мою думку, - це бачити логіку як сервер, а інтерфейс - як клієнт. Отже, інтерфейс побудований для логіки, має знання про логіку та викликає логіку, тоді як логіка нічого не знає про інтерфейс і просто відповідає на запити, які він отримує. (І ці запити трапляються з інтерфейсу користувача, але логіка цього не знає.)
Якщо говорити більш практично, ніде в файлах логіки вихідного коду логіки не слід знайти жодного включення / імпорту / використання операторів, що посилаються на файли інтерфейсу користувача, тоді як файли вихідного коду інтерфейсу будуть повно включені / імпортувати / використовувати висловлювання, що посилаються на файли логіки.
Отже, щоб повернутися до вашої справи, немає абсолютно нічого поганого в тому, що код інтерфейсу, який заповнює комбо-бокс, знає про клас гамбургерів. Була б проблема, якби клас гамбургерів знав щось про комбіновані коробки.
Між іншим, ця конструкція дозволяє ще одне, чого слід очікувати від такої системи: у логіку має бути можливість підключити стільки різних інтерфейсів, як вам завгодно, і все це все одно має працювати.