Saya telah mengkode untuk sementara waktu, tetapi kebanyakan skrip dan aplikasi sederhana. Saya telah pindah ke peran baru di mana ini semua tentang mengembangkan Aplikasi Web dan menggunakan arsitektur MVC yang tepat, jadi saya berusaha keras untuk mempelajari semua itu dengan sangat cepat.
Saya harap pertanyaan ini tidak terlalu mirip dengan " Praktik Terbaik untuk Arsitektur MVC " tetapi karena saya akan melalui beberapa tutorial yang berbeda, saya perhatikan bahwa beberapa memiliki beberapa pengontrol untuk hal yang berbeda.
Berapa banyak pengontrol yang dibutuhkan oleh satu aplikasi web?
Saya menyadari ini akan sulit dijawab tanpa contoh jadi saya akan berikan satu:
Aplikasi:
- Pengguna login.
- Pengguna dapat melakukan satu dari tiga hal:
a) Mengunggah file (disimpan dalam database mongodb dengan data meta).
b) Cari file.
c) Logout.
Pertanyaan saya bersifat umum, tetapi saya memberikan contoh untuk membantu siapa pun yang mencoba menjawab.
Jawaban:
Sebagai contoh Anda, saya akan membuat dua kontroler:
Secara umum pendekatan RESTful di mana Anda berpikir tentang segala sesuatu sebagai sumber daya yang dapat ditampilkan, dibuat, diedit dan dihancurkan memberi Anda ide bagus bagaimana menyusun sesuatu. Seperti yang Anda lihat dari contoh saya, saya tidak terlalu dekat dengan setiap kata kerja di REST.
Anda kemungkinan besar akan membutuhkan lebih banyak pengontrol untuk fungsionalitas lebih lanjut. Misalnya Pengontrol Pengguna tempat pengguna dapat membuat akun baru. Selain itu, Anda membutuhkan antarmuka admin tempat Anda dapat mengedit sumber daya dengan hak istimewa yang lebih tinggi. Dalam kasus seperti itu, sangat umum untuk memiliki hampir setiap pengontrol digandakan.
Perkiraan yang sangat kasar untuk mendapatkan ide awal bisa menjadi satu pengontrol untuk setiap tabel di basis data Anda yang dapat diakses pengguna. Tapi ini benar-benar hanya pengukuran yang sangat kasar.
sumber
Itu sangat tergantung pada aplikasi web. Dalam contoh Anda, satu mungkin sudah cukup. Jika Anda menerapkan aplikasi e-niaga penuh dengan pengiriman, pajak, manajemen inventaris, harga berjenjang, dll., Maka Anda mungkin ingin memiliki beberapa lagi.
Jika controller Anda menderita satu atau lebih bau kode (terutama Kelas Besar atau Objek Dewa ) maka Anda tahu Anda mungkin melewati titik di mana hanya satu yang akan dilakukan.
sumber
Ini sangat tergantung pada kebutuhan aplikasi dan arsitektur modul bisnis Anda.
Seorang jenderal aturan praktis , jumlah kontroler diperlukan tergantung pada sejumlah modul dan sub-modul dalam aplikasi Web.
Sebagai pelengkap, akan sangat membantu untuk mengatur pengontrol ke dalam Area . Konsep Area dibangun ke dalam kerangka ASP.NET MVC dan menyederhanakan organisasi pengontrol yang melayani satu modul.
Ada sejumlah diskusi terkait:
sumber
Saya suka cara Apple melakukannya.
Idenya adalah Anda harus dapat dengan mudah menukar Tampilan. IMO, dengan hanya memiliki 1
Controller
perView
itu membuatnya lebih mudah untuk mencapai ini. Tapi saya yakin Anda bisa memiliki Pengendali dengan banyak Tampilan dan masih mendesainnya sehingga Anda dapat mengganti Tampilan tanpa mengubah logika program.sumber
Salah satu contoh yang saya suka adalah memikirkan termostat. Thermostat adalah visual yang bagus untuk melihat pola MVC.
Pada termostat analog yang lebih lama, Anda dapat menggambarkan hal-hal seperti ini:
Lihat - Pembaca suhu, yang menampilkan suhu saat ini.
Pengontrol - Tombol putar, tempat Anda mengubah suhu
Model - Bagian dalam yang dipanggil oleh pengontrol yang menyebabkan suhu berubah.
Anda harus selalu mematuhi desain yang memungkinkan kopling longgar dan model batas dan pengontrol terkait untuk satu tugas , dan Anda harus menggunakan sebanyak mungkin modul / pengontrol yang Anda butuhkan . Tergantung pada ukuran aplikasi Anda, Anda mungkin memiliki pandangan yang jauh lebih sedikit daripada yang Anda lakukan model dan pengendali. Ini diharapkan dengan aplikasi ukuran besar. Pemrograman Berorientasi Objek Bagus ditandai dengan kopling longgar, enkapsulasi, pewarisan, dan polimorfisme. Tidak semua bahasa mendukung polimorfisme dengan tingkat yang sama (fungsi, metode, overloading / overriding operator).
Jika Anda ingin memiliki pemahaman yang lebih baik dalam menggunakan arsitektur MVC dengan benar, bacalah perangkat lunak "Pola Desain: Elemen yang Dapat Digunakan Kembali ..." yang menggunakan C ++ dan SmallTalk sebagai contoh kode. Buku ini bukan alfa dan omega, tapi ini pasti awal!
Semoga berhasil!
sumber
Saya berasumsi bahwa contoh Anda akan berkembang menjadi sistem yang kompleks.
Aplikasi:
Pengguna log in:
LoginController
Tanggung jawabnya adalah menangani login, mengarahkan kembali, atau memberi tahu pengguna tentang hasilnya.
Unggah file
UploadController
Saya berasumsi di sini bahwa Anda ingin mengunggah semua jenis file. Jika nanti Anda memutuskan untuk mengunggah MP3 dan PDF, maka saya akan memiliki basis UploadController, MP3UploadController, dan PDFUploadController.
Cari file.
SearchFileController
Ini sudah cukup untuk persyaratan dasar. Anda dapat memiliki beberapa pengontrol pencarian di kemudian hari tergantung pada seberapa rumitnya logika pencarian. Hal terakhir yang ingin Anda miliki adalah SearchController tunggal dengan 20 metode tindakan melakukan pencarian yang berbeda.
Keluar.
-
LogoutController
.Orang mungkin menganggap ini sebagai pembunuhan berlebihan, tapi saya rasa itu tidak berlebihan. Saya pikir itu bersih dan dipisahkan dengan baik.
Jika saya melihat struktur proyek ini, saya akan langsung tahu apa fungsinya dan bagaimana strukturnya. Untuk mengambil langkah lebih jauh, saya akan menempatkan
LoginController
danLogoutController
ke area yang terpisah.Saya telah mengembangkan sesuatu seperti ini sebelumnya dan bekerja dengan sangat baik.
sumber
Sebagian besar kode Anda akan terjadi di lapisan bisnis, bukan? Jika itu yang terjadi maka semua yang Anda lakukan di controller Anda adalah mengembalikan data ke tampilan.
Tidak begitu yakin apakah saya penggemar memisahkan pengontrol menjadi subtipe. Sementara Anda harus mempertahankan pemisahan kekhawatiran, saya pikir subtipe akan berjalan terlalu jauh. Anda juga perlu berhati-hati dalam kasus di mana benda berat diinisialisasi dalam konstruktor atau pengontrol. Sebagai contoh: dalam contoh Anda, Anda ingin benda berat, hanya digunakan untuk mencari / mengunggah file yang akan dirilis ketika pengguna ada di halaman login.
Lebih baik memiliki pengontrol per unit logika, misalnya AccountController (login, registrasi, logout), FileController (pencarian, unggah) dan sebagainya.
sumber
Secara umum Anda dapat mengatakan bahwa setiap MODEL memiliki CONTROLLER dan VIEW khusus. Dengan mengatakan jendral saya maksudkan bahwa ini adalah praktik terbaik.
Aspek aplikasi (seperti manajemen pengguna) harus diterjemahkan ke layanan aplikasi dan perlu dipanggil oleh controller itu sendiri, atau untuk membungkus controller Anda (menggunakan atribut yang membuat fungsi controller "terlihat" sesuai dengan permintaan peran pengguna, misalnya).
Ingat bahwa semua pengontrol pada dasarnya harus menangani operasi CRUD atas model dan menggunakan tampilan berbeda untuk filter yang berbeda.
Menurut pendapat saya salah satu keuntungan utama MVC sebagai polanya adalah memberikan cara terbaik untuk mengikat model dan pandangan.
Tentang contoh yang Anda tambahkan: Saya akan membuat 2 pengontrol: satu untuk semua operasi login pengguna (daftar, masuk, keluar dll) dan yang kedua untuk operasi file (Unggah dan cari). perhatikan bahwa yang pertama juga harus didukung dengan beberapa Aspek terkait dengan fungsi Login dan yang kedua adalah pengontrol biasa
sumber