CodeGym/Java Course/Modul 3/pendekatan MVC

pendekatan MVC

Level 14, Pelajaran 2
Tersedia

Pengantar arsitektur MVC

Arsitektur aplikasi paling populer yang diketahui oleh setiap programmer adalah MVC . MVC adalah singkatan dari Model-View-Controller .

Ini bukan arsitektur aplikasi seperti arsitektur komponen aplikasi, tetapi kami akan kembali ke nuansa ini nanti. Apa itu MVC?

MVC adalah skema untuk memisahkan data aplikasi dan logika kontrol menjadi tiga komponen terpisah — model, tampilan, dan pengontrol — sehingga setiap komponen dapat dimodifikasi secara independen.

  • Model (Model) menyediakan data dan merespons perintah pengontrol dengan mengubah statusnya.
  • Tampilan bertanggung jawab untuk menampilkan data model kepada pengguna sebagai respons terhadap perubahan model.
  • Pengontrol (Pengontrol) menginterpretasikan tindakan pengguna, memberi tahu model tentang perlunya perubahan.

Model ini ditemukan kembali pada tahun 1978 (!) Tahun. Ya, masalah dengan arsitektur perangkat lunak yang tepat relevan 50 tahun yang lalu. Berikut adalah bagaimana model ini dijelaskan oleh diagram aslinya:

Pengantar arsitektur MVC

Model menyediakan data dan metode untuk bekerja dengannya: permintaan ke database, memeriksa kebenaran. Model tidak bergantung pada tampilan (tidak tahu cara merender data) dan pengontrol (tidak memiliki titik interaksi pengguna), menyediakan akses dan pengelolaan data.

Model dibangun sedemikian rupa untuk menanggapi permintaan dengan mengubah statusnya, dan pemberitahuan "pengamat" dapat dibangun. Model, karena tidak bergantung pada representasi visual, dapat memiliki beberapa representasi berbeda untuk satu "model".

Tampilan bertanggung jawab untuk mendapatkan data yang diperlukan dari model dan mengirimkannya ke pengguna. Tampilan tidak memproses input pengguna.

Pengontrol menyediakan "komunikasi" antara pengguna dan sistem. Mengontrol dan mengarahkan data dari pengguna ke sistem dan sebaliknya. Menggunakan model dan tampilan untuk menerapkan tindakan yang diinginkan.

Ada kesulitan tertentu dengan fakta bahwa model ini telah berkembang sedikit selama beberapa dekade. Artinya, namanya tetap sama, tetapi tujuan bagian-bagiannya mulai berubah.

arsitektur MVC di web

Ide di balik pola desain MVC sangat sederhana: kita perlu memisahkan dengan jelas tanggung jawab untuk berbagai perilaku dalam aplikasi kita:

Model— pemrosesan data dan logika aplikasi.

melihat— memberikan data kepada pengguna dalam format apa pun yang didukung.

pengontrol- memproses permintaan pengguna dan memanggil sumber daya yang sesuai.

Aplikasi ini dibagi menjadi tiga komponen utama, yang masing-masing bertanggung jawab atas tugas yang berbeda. Mari kita lihat lebih dekat komponen aplikasi client-server menggunakan sebuah contoh.

Pengontrol

Pengguna mengklik berbagai elemen pada halaman di browser, akibatnya browser mengirimkan berbagai permintaan HTTP: GET, POST, atau lainnya. Pengontrol dapat menyertakan browser dan kode JS yang berfungsi di dalam halaman.

Fungsi utama pengontrol dalam hal ini adalah memanggil metode pada objek yang diperlukan, mengelola akses ke sumber daya untuk melakukan tugas yang ditentukan oleh pengguna. Biasanya, pengontrol memanggil model yang sesuai untuk tugas tersebut dan memilih tampilan yang sesuai.

Model

Model dalam arti luas adalah data dan aturan yang digunakan untuk bekerja dengan data - bersama-sama membentuk logika bisnis aplikasi. Merancang aplikasi selalu dimulai dengan membangun model objek yang dioperasikannya.

Misalkan kita memiliki toko online yang menjual buku, lalu apakah orang tersebut hanya pengguna aplikasi atau juga penulis buku? Pertanyaan penting ini harus dijawab selama desain model.

Selanjutnya ada seperangkat aturan: apa yang bisa dilakukan, apa yang tidak bisa dilakukan, kumpulan data mana yang dapat diterima dan mana yang tidak. Bisakah sebuah buku ada tanpa penulis? Dan penulis tanpa buku? Bisakah tanggal lahir pengguna di tahun 300 dan seterusnya.

Model memberikan pengontrol tampilan data yang diminta pengguna (pesan, halaman buku, gambar, dll.). Model data akan tetap sama tidak peduli bagaimana kami ingin menyajikannya kepada pengguna. Oleh karena itu, kami memilih tampilan yang tersedia untuk menampilkan data.

Model berisi bagian terpenting dari logika aplikasi kita , logika yang memecahkan masalah yang sedang kita hadapi (forum, toko, bank, dll.). Pengontrol berisi sebagian besar logika organisasi untuk aplikasi itu sendiri (seperti Manajer Proyek Anda).

Melihat

View menyediakan berbagai cara untuk merepresentasikan data yang diterima dari model. Itu bisa berupa template yang diisi dengan data. Mungkin ada beberapa tampilan berbeda dan pengontrol memilih mana yang terbaik untuk situasi saat ini.

Sebuah aplikasi web biasanya terdiri dari sekumpulan controller, model, dan view. Controllernya hanya bisa di backend, tapi bisa juga ada varian dari beberapa controller, ketika logikanya tersebar di frontend juga. Contoh bagus dari pendekatan ini adalah aplikasi seluler apa pun.

Contoh MVC di web

Katakanlah Anda perlu mengembangkan toko online yang akan menjual buku. Pengguna dapat melakukan tindakan berikut: melihat buku, mendaftar, membeli, menambahkan item ke pesanan saat ini, menandai buku yang disukainya, dan membelinya.

Aplikasi Anda harus memiliki model yang bertanggung jawab atas semua logika bisnis. Anda juga memerlukan pengontrol yang akan memproses semua tindakan pengguna dan mengubahnya menjadi pemanggilan metode dari logika bisnis. Namun, satu metode pengontrol dapat memanggil banyak metode model yang berbeda.

Anda juga memerlukan kumpulan tampilan: daftar buku, informasi tentang satu buku, kereta belanja, daftar pesanan. Setiap halaman aplikasi web sebenarnya adalah tampilan terpisah yang menampilkan aspek tertentu dari model kepada pengguna.

Mari kita lihat apa yang terjadi jika pengguna membuka daftar buku yang direkomendasikan toko buku untuk dilihat judulnya. Seluruh urutan tindakan dapat dijelaskan dalam bentuk 6 langkah:

Contoh MVC di web

Langkah:

  1. Pengguna mengklik tautan "disarankan" dan browser mengirimkan permintaan ke, katakanlah, /books/recommendations.
  2. Pengontrol memeriksa permintaan : pengguna harus masuk. Atau kita harus memiliki koleksi buku untuk pengguna yang tidak masuk. Pengontrol kemudian memanggil model dan memintanya untuk mengembalikan daftar buku yang direkomendasikan kepada pengguna N.
  3. Model mengakses database, mengambil informasi tentang buku dari sana: buku yang sedang populer, buku yang dibeli oleh pengguna, buku yang dibeli oleh temannya, buku dari daftar keinginannya. Berdasarkan data ini, model membuat daftar 10 buku yang direkomendasikan dan mengembalikannya ke controller.
  4. Pengontrol menerima daftar buku yang direkomendasikan dan melihatnya. Pada tahap ini, pengontrol membuat keputusan! Jika ada sedikit buku atau daftar benar-benar kosong, maka daftar buku akan diminta untuk pengguna yang tidak tercatat. Jika saat ini sedang ada promosi, pengontrol dapat menambahkan buku promosi ke dalam daftar.
  5. Pengontrol menentukan halaman mana yang akan ditampilkan kepada pengguna. Itu bisa berupa halaman kesalahan, halaman dengan daftar buku, halaman ucapan selamat bahwa pengguna telah menjadi pengunjung ke sejuta.
  6. Server memberi klien halaman ( tampilan ) yang dipilih oleh pengontrol. Itu diisi dengan data yang diperlukan (nama pengguna, daftar buku) dan dikirim ke klien.
  7. Klien menerima halaman dan menampilkannya kepada pengguna.

Apa manfaat dari pendekatan ini?

Keuntungan paling jelas yang kami dapatkan dari penggunaan konsep MVC adalah pemisahan yang jelas antara logika presentasi (antarmuka pengguna) dan logika aplikasi (backend).

Keuntungan kedua adalah pembagian bagian server menjadi dua: model pintar ( pelaksana ) dan pengontrol ( pusat keputusan ).

Pada contoh sebelumnya, ada saat pengontrol dapat menerima daftar kosong buku yang direkomendasikan dari model dan memutuskan apa yang harus dilakukan dengannya. Secara teoritis, logika ini dapat dimasukkan langsung ke dalam model.

Pertama, saat meminta buku yang direkomendasikan, model akan memutuskan apa yang harus dilakukan jika daftarnya kosong. Lalu saya harus menambahkan kode di tempat yang sama, apa yang harus dilakukan jika ada promosi yang sedang berlangsung, lalu opsi yang lebih berbeda.

Kemudian ternyata admin toko ingin melihat bagaimana tampilan halaman pengguna tanpa promosi, atau sebaliknya, tidak ada promosi sekarang, tetapi ingin melihat bagaimana promosi yang akan datang ditampilkan. Dan tidak ada metode untuk ini. Oleh karena itu, diputuskan untuk memisahkan pusat keputusan (pengontrol) dari logika bisnis (model).

Selain mengisolasi tampilan dari logika aplikasi, konsep MVC sangat mengurangi kompleksitas aplikasi besar. Kode jauh lebih terstruktur, membuatnya lebih mudah untuk memelihara, menguji, dan menggunakan kembali solusi.

Memahami konsep MVC, Anda sebagai pengembang menyadari di mana Anda perlu menambahkan penyortiran daftar buku:

  • Pada tingkat permintaan basis data.
  • Pada level logika bisnis (model).
  • Pada level logika bisnis (pengontrol).
  • Dalam tampilan - di sisi klien.

Dan ini bukan pertanyaan retoris. Saat ini, pikirkan di mana dan mengapa Anda perlu menambahkan kode untuk menyortir daftar buku.

Model MVC Klasik

Interaksi antar komponen MVC diimplementasikan secara berbeda pada aplikasi web dan aplikasi mobile. Ini karena aplikasi web berumur pendek, memproses satu permintaan pengguna dan keluar, sedangkan aplikasi seluler memproses banyak permintaan tanpa memulai ulang.

Aplikasi web biasanya menggunakan model "pasif", sedangkan aplikasi seluler menggunakan model "aktif". Model aktif, tidak seperti model pasif, memungkinkan Anda untuk berlangganan dan menerima pemberitahuan perubahan di dalamnya. Ini tidak diperlukan untuk aplikasi web.

Seperti inilah interaksi komponen dalam berbagai model:

Model MVC Klasik

Aplikasi seluler (model aktif) secara aktif menggunakan acara dan mekanisme berlangganan acara. Dengan pendekatan ini, tampilan ( view ) mengikuti perubahan model. Kemudian, ketika beberapa peristiwa terjadi (misalnya, pengguna mengklik tombol), pengontrol dipanggil . Ini juga memberi model perintah untuk mengubah data.

Jika beberapa data telah berubah, maka model menghasilkan peristiwa tentang perubahan data ini. Semua tampilan yang berlangganan peristiwa ini (yang penting untuk mengubah data khusus ini) menerima peristiwa ini dan memperbarui data di antarmuka mereka.

Dalam aplikasi web, semuanya diatur sedikit berbeda. Perbedaan teknis utama adalah bahwa klien tidak dapat menerima pesan sisi server atas inisiatif server .

Oleh karena itu, pengontrol dalam aplikasi web biasanya tidak mengirim pesan apa pun ke tampilan, tetapi memberikan halaman baru kepada klien, yang secara teknis merupakan tampilan baru atau bahkan aplikasi klien baru (jika satu halaman tidak tahu apa-apa tentang yang lain) .

Saat ini, masalah ini sebagian diselesaikan dengan menggunakan pendekatan berikut:

  • Secara teratur polling server untuk perubahan pada data penting (satu menit sekali atau lebih).
  • WebSockets memungkinkan klien untuk berlangganan pesan server.
  • Pemberitahuan push web dari sisi server.
  • Protokol HTTP/2 memungkinkan server untuk memulai pengiriman pesan ke klien.
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar