Pertama-tama, contoh yang Anda berikan tidak terlalu tidak efisien; hanya sedikit tidak efisien; inefisiensinya berada di bawah tingkat yang dapat dilihat. Tapi, bagaimanapun, mari kita lanjutkan dengan pertanyaan.
Cara saya memahaminya, ketika kita berbicara tentang pemisahan UI dan Logika , yang kita maksudkan adalah penghindaran erat .
Close coupling mengacu pada situasi di mana UI mengetahui (dan memanggil) logika, dan logika mengetahui (dan memanggil) UI. Untuk menghindari kopling tertutup, pengguna tidak perlu menghapus kopling sama sekali. (Itulah yang tampaknya ingin Anda tuju dengan menghancurkan antarmuka di antara mereka hingga ke antarmuka string yang paling umum-denominator.) Yang perlu dilakukan adalah menggunakan kopling longgar .
Kopling longgar berarti bahwa A tahu B, tetapi B tidak tahu A. Dengan kata lain, kedua pihak yang terlibat memainkan peran klien dan server yang berbeda, di mana klien mengetahui server, tetapi server tidak tahu klien.
Dalam hal UI dan logika, cara terbaik untuk mengatur ini menurut saya adalah dengan melihat logika sebagai server, dan UI sebagai klien. Jadi, UI dibangun untuk logika, memiliki pengetahuan tentang logika, dan memanggil logika, sementara logika tidak tahu apa-apa tentang UI, dan hanya menanggapi permintaan yang diterimanya. (Dan permintaan ini datang dari UI, tetapi logikanya tidak tahu itu.)
Untuk meletakkannya dalam istilah yang lebih praktis, tidak ada file kode sumber mana pun dari logika yang harus Anda temukan pernyataan include / import / using yang merujuk ke file UI, sedangkan file kode sumber UI akan penuh dengan include / import / using pernyataan yang merujuk ke file Logika.
Jadi, untuk kembali ke kasus Anda, sama sekali tidak ada yang salah dengan fakta bahwa kode UI yang mengisi kotak kombo tahu tentang kelas hamburger. Akan ada masalah jika kelas hamburger tahu apa-apa tentang kotak kombo.
Kebetulan, desain ini memungkinkan hal lain yang harus Anda harapkan dari sistem seperti itu: harus memungkinkan untuk menyambungkan sebanyak mungkin UI yang berbeda sesuai dengan logika, dan semuanya harus tetap berfungsi.