Menurut halaman wikipedia untuk arsitektur MVC , tampilan bebas untuk diberitahukan oleh model, dan juga bebas untuk menanyakan model tentang keadaan saat ini. Namun, menurut kursus Paul Hegarty tentang iOS 5 di Stanford, kuliah 1, halaman 18 semua interaksi harus melalui pengontrol, dengan Model dan Tampilan yang tidak pernah seharusnya saling mengenal. Tidak jelas bagi saya apakah pernyataan Hegarty harus dimaksudkan sebagai penyederhanaan untuk kursus, tetapi saya tergoda untuk mengatakan bahwa dia ingin desain seperti itu.
Bagaimana Anda menjelaskan dua sudut pandang yang berlawanan ini?
Di web, semua orang memanggil MVC decoupling mereka.
Beberapa teknologi, seperti C #, menggunakan MVVM karena tidak ada tautan antara View dan lainnya, semuanya berjalan melalui pencari layanan, mengikat variabel.
Pada MVC murni, View berbicara langsung dengan Model dan sebaliknya. Kontroler hanya ada ketika ada perubahan.
Dan kemudian, ada yang disebut PAC (Presentation Abstraction Control). Dalam arsitektur ini, View dan Model tidak saling berbicara. Pengontrol adalah satu-satunya yang diizinkan melakukan apa pun dengan Tampilan atau Model. Orang sering membingungkan ini dengan MVC.
Anda akan melihat penjelasan yang jauh lebih baik di sini: http://www.garfieldtech.com/blog/mvc-vs-pac
sumber
Bagi saya, tujuan dasar arsitektur adalah tidak menghalangi upaya di masa depan untuk refactoring. Biasanya, pandangan berinteraksi langsung dengan model jives dengan persyaratan ini, dan relatif jelas ketika tidak.
Ketika pandangan menjadi terlalu intim dengan model, ViewModel bisa menjadi hal yang indah, tetapi biasanya bagi saya kasus di mana itu disebut berada di minoritas.
sumber
Di MVC , Paul Hegarty salah. Pengontrol adalah tentang peristiwa pengguna, bukan komunikasi model-to-view. Dalam MVC klasik , tampilan mengamati model (pola Observer).
Dengan pria di antara melakukan mediasi, polanya harus disebut MVP , dan pada kenyataannya, sebagian besar dari apa yang sekarang disajikan sebagai MVC, sebenarnya lebih dekat ke MVP.
Lalu ada MVVM yang merupakan sesuatu yang mirip dengan keduanya, namun agak berbeda, dan sudah ada sejak lama ... yang terbaik adalah melihatnya sebagai dua MVC / MVP yang diikat bersama melalui objek viewmodel - "klien" MVC memiliki viewmodel sebagai modelnya, dan "server" MVC memiliki viewmodel sebagai pandangannya.
sumber
Karena Anda bertanya tentang materi dalam kuliah Stanford itu khususnya, ada baiknya mempertimbangkan dua hal tentang sikap Hegarty:
sumber
Saya setuju dengan Paul Hegarty dan percaya bahwa View tidak boleh tahu tentang Model. Ini tidak sulit untuk diraih tetapi membawa manfaat tambahan untuk desain Anda dan fleksibilitas di masa depan.
Dalam aplikasi kecil (biasanya desktop) di mana saya ingin menghindari kelas ViewModel "dummy" dan menjaga semuanya tetap sederhana, saya juga menggunakan antarmuka IModel (lihat jawaban di atas) dan berhati-hati agar Model tidak tahu tentang View (gunakan pelanggan) seperti dalam MVC klasik).
Juga dalam hal ini Kontroler ternyata cukup digabungkan dengan Tampilan dan untuk kesederhanaan saya tidak selalu jelas memisahkannya.
Pendekatan "disederhanakan" yang kedua adalah OK ketika Anda mungkin memiliki beberapa tampilan untuk model yang sama, tetapi saya tidak akan merekomendasikannya jika Anda ingin menggunakan tampilan yang sama untuk model yang berbeda. Di bawah berbeda saya maksud sangat berbeda secara alami dan bukan hanya kelas tes JUnit yang "mengikuti" model utama.
sumber
Saya percaya bahwa tidak ada aturan yang keras dan cepat untuk ini, itu sepenuhnya tergantung pada kebutuhan Anda.
Anda akan menemukan orang-orang dengan kepercayaan berbeda. Arsitektur adalah konsep untuk membantu merancang solusi yang lebih baik.
Terlepas dari komunikasi model-view, ada satu lagi kontradiksi tentang logika bisnis di MVC. Banyak orang percaya bahwa semua logika bisnis harus menjadi satu model (lihat pertanyaan SO ini ), di sisi lain tautan yang dibagikan oleh Florian (dalam jawabannya) mengatakan logika bisnis harus di controller.
Terlepas dari ini, ada kemungkinan untuk membagi logika bisnis menjadi logika aplikasi (letakkan di controller) dan Domain login (letakkan di model).
Jadi, moral cerita adalah MVC berarti model, tampilan dan pengontrol harus terpisah. Selain itu, apa pun yang paling cocok untuk Anda.
sumber
Saya menggunakan DTO untuk komunikasi model-view.
Contohnya:
sumber
Saya bersama kamp yang mengatakan bahwa pandangan tidak boleh berkomunikasi dengan model. Pengontrol harus selalu menjadi orang yang dapat melakukan segalanya, kemudian memutuskan apa yang harus dilakukan (validasi, minta data dari model, dll).
Saya cenderung melihatnya lebih sebagai masalah organisasi yang lain.
sumber
Seperti banyak yang disarankan tentang mengapa dan bagaimana tampilan & model harus berinteraksi secara bebas dalam konteks yang berbeda, tetapi alasan utama di iOS untuk membuat Pengendali adalah mediator di antara mereka adalah untuk menghindari ketergantungan Model & Lihat dalam basis kode Anda dan memungkinkan kami untuk menggunakan kembali baik model atau tampilan sesuai dengan persyaratan dengan evolusi iOS.
Karena kami mungkin perlu menyimpan pembaruan untuk Aplikasi kami di UI / UX atau Model atau beberapa kali keduanya, itu seharusnya tidak menghasilkan kode dependensi mode antara model & tampilan. Jika Anda ingin mengubah lapisan Presentasi aplikasi Anda, maka Anda cukup pergi dan ubah maka Anda masih bisa menggunakan kembali Model yang sama dan sebaliknya bisa dilakukan.
Meskipun saya setuju bahwa MVC di iOS menghasilkan ViewControllers raksasa dengan banyak berbagai logika di dalamnya dan menangani setiap jenis hal selain apa yang dimaksudkan untuk itu. Jadi lebih baik menggunakan MVVM atau Presentation Controls untuk membuat basis kode Anda lebih fleksibel, mudah untuk membaca dan dipelihara dengan ViewControllers yang lebih kecil.
Ini mungkin membantu yang mencari ViewControllers yang lebih kecil di iOS:
http://blog.xebia.com/simplification-of-ios-view-controllers-mvvm-or-presentation-controls/
sumber