Pambuka kanggo arsitektur MVC

Arsitèktur aplikasi sing paling populer sing saben programmer ngerti yaiku MVC . MVC singkatan saka Model-View-Controller .

Iki ora dadi arsitektur aplikasi minangka arsitektur komponen aplikasi, nanging kita bakal bali menyang nuansa iki mengko. Apa MVC?

MVC minangka skema kanggo misahake data aplikasi lan logika kontrol dadi telung komponen sing kapisah - model, tampilan, lan pengontrol - supaya saben komponen bisa diowahi kanthi mandiri.

  • Model (Model) nyedhiyakake data lan nanggapi printah controller kanthi ngganti negara.
  • Tampilan tanggung jawab kanggo nampilake data model menyang pangguna kanggo nanggepi owah-owahan model.
  • Pengontrol (Controller) napsirake tumindak pangguna, ngabari model sing perlu kanggo owah-owahan.

model iki nemokke bali ing 1978 (!) Taun. Ya, masalah karo arsitektur piranti lunak sing tepat relevan 50 taun kepungkur. Mangkene carane model iki diterangake kanthi diagram ing asline:

Pambuka kanggo arsitektur MVC

Model kasebut nyedhiyakake data lan cara kanggo nggarap: pitakon menyang database, mriksa bener. Model kasebut bebas saka tampilan (ora ngerti carane nerjemahake data) lan controller (ora duwe titik interaksi pangguna), nyedhiyakake akses lan manajemen data.

Model kasebut dibangun kanthi cara kanggo nanggapi panjalukan kanthi ngganti negara, lan kabar "pengamat" bisa dibangun. Model, amarga kamardikan saka perwakilan visual, bisa duwe sawetara perwakilan beda kanggo siji "model".

Tampilan tanggung jawab kanggo njupuk data sing dibutuhake saka model lan ngirim menyang pangguna. Tampilan ora ngolah input pangguna.

Kontroler nyedhiyakake "komunikasi" antarane pangguna lan sistem. Ngontrol lan ngarahake data saka pangguna menyang sistem lan kosok balene. Nggunakake model lan tampilan kanggo ngleksanakake tumindak sing dikarepake.

Ana kangelan tartamtu karo kasunyatan sing model iki wis ngalami évolusi sethitik liwat dekade. Tegese, jeneng kasebut tetep padha, nanging tujuane bagean kasebut wiwit owah.

arsitektur MVC ing web

Gagasan ing mburi pola desain MVC gampang banget: kita kudu misahake tanggung jawab kanggo macem-macem prilaku ing aplikasi kita:

Model- pangolahan data lan logika aplikasi.

tampilan- nyedhiyakake data menyang pangguna ing format apa wae sing didhukung.

Pengontrol- ngolah panjalukan pangguna lan nelpon sumber daya sing cocog.

Aplikasi kasebut dipérang dadi telung komponen utama, sing saben tanggung jawab kanggo tugas sing beda-beda. Ayo goleki kanthi luwih rinci babagan komponen aplikasi klien-server nggunakake conto.

Pengontrol

Pangguna ngeklik macem-macem unsur ing kaca ing browser, minangka asil saka browser ngirim macem-macem panjalukan HTTP: GET, POST, utawa liyane. Pengontrol bisa nyakup browser lan kode JS sing bisa digunakake ing kaca kasebut.

Fungsi utama pengontrol ing kasus iki yaiku nelpon metode ing obyek sing dibutuhake, ngatur akses menyang sumber daya kanggo nindakake tugas sing ditemtokake dening pangguna. Biasane, controller nelpon model cocok kanggo tugas lan milih tampilan cocok.

Model

Model ing pangertèn sing wiyar yaiku data lan aturan sing digunakake kanggo nggarap data - bebarengan nggawe logika bisnis aplikasi kasebut. Ngrancang aplikasi mesthi diwiwiti kanthi mbangun model obyek sing dioperasikake.

Contone, kita duwe toko online sing adol buku, banjur apa wong mung pangguna aplikasi utawa uga penulis buku? Pitakonan penting iki kudu dijawab sajrone desain model.

Salajengipun, ana set aturan: apa sing bisa ditindakake, apa sing ora bisa ditindakake, set data sing bisa ditampa lan sing ora. Apa buku bisa ana tanpa penulis? Lan penulis tanpa buku? Apa tanggal lair pangguna ing taun 300 lan liya-liyane.

Model menehi controller tampilan data sing pangguna wis dijaluk (pesen, kaca buku, gambar, etc.). Model data bakal padha ora ketompo carane kita arep kanggo saiki pangguna. Mulane, kita milih tampilan sing kasedhiya kanggo nampilake data.

Model kasebut ngemot bagean paling penting saka logika aplikasi kita , logika sing ngrampungake masalah sing kita lakoni (forum, toko, bank, lsp.). Pengontrol biasane ngemot logika organisasi kanggo aplikasi kasebut dhewe (kaya Project Manager).

Ndeleng

View nyedhiyakake macem-macem cara kanggo makili data sing ditampa saka model. Bisa dadi cithakan sing diisi data. Bisa uga ana sawetara tampilan sing beda lan pengontrol milih sing paling apik kanggo kahanan saiki.

Aplikasi web biasane kalebu sakumpulan pengontrol, model, lan tampilan. Pengontrol mung bisa ana ing mburi, nanging uga bisa dadi varian saka sawetara pengontrol, nalika logika kasebut uga nyebar ing ngarep. Conto apik saka pendekatan iki yaiku aplikasi seluler apa wae.

MVC conto ing web

Contone, sampeyan kudu nggawe toko online sing bakal ngedol buku. Pangguna bisa nindakake tumindak ing ngisor iki: ndeleng buku, ndhaptar, tuku, nambah item menyang pesenan saiki, menehi tandha buku sing disenengi lan tuku.

Aplikasi sampeyan kudu duwe model sing tanggung jawab kanggo kabeh logika bisnis. Sampeyan uga butuh pengontrol sing bakal ngolah kabeh tumindak pangguna lan ngowahi dadi metode panggilan saka logika bisnis. Nanging, siji cara controller bisa nelpon akeh cara model beda.

Sampeyan uga mbutuhake set tampilan: dhaptar buku, informasi babagan siji buku, keranjang blanja, dhaptar pesenan. Saben kaca aplikasi web iku sejatine tampilan kapisah sing nuduhake aspek model tartamtu menyang pangguna.

Ayo ndeleng apa sing kedadeyan yen pangguna mbukak dhaptar buku sing disaranake toko buku kanggo ndeleng judhul. Kabeh urutan tumindak bisa diterangake ing wangun 6 langkah:

MVC conto ing web

Langkah-langkah:

  1. Pangguna ngeklik tautan "disaranake" lan browser ngirim panjaluk , ucapake, /books/recommendations.
  2. Kontroler mriksa panyuwunan : pangguna kudu mlebu. Utawa kita kudu duwe koleksi buku kanggo pangguna sing ora mlebu. Kontroler banjur nelpon model kasebut lan njaluk bali dhaptar buku sing disaranake kanggo pangguna N.
  3. Model kasebut ngakses database, njupuk informasi babagan buku saka kono: buku sing saiki populer, buku sing dituku pangguna, buku sing dituku kanca-kanca, buku saka dhaptar pesenan. Adhedhasar data kasebut, model kasebut nggawe dhaptar 10 buku sing disaranake lan bali menyang pengontrol.
  4. Kontroler nampa dhaptar buku sing disaranake lan ndeleng. Ing tahap iki, pengontrol nggawe keputusan! Yen ana sawetara buku utawa dhaptar kosong, banjur njaluk dhaptar buku kanggo pangguna sing ora mlebu log. Yen ana promosi saiki, pengontrol bisa nambah buku promosi menyang dhaptar.
  5. Kontroler nemtokake kaca sing bakal dituduhake menyang pangguna. Bisa dadi kaca kesalahan, kaca kanthi dhaptar buku, kaca sing ngucapake selamat yen pangguna wis dadi pengunjung yuta yuta.
  6. Server menehi klien kaca ( tampilan ) sing dipilih dening controller. Iki diisi karo data sing dibutuhake (jeneng pangguna, dhaptar buku) lan menyang klien.
  7. Klien nampa kaca kasebut lan nampilake menyang pangguna.

Apa keuntungan saka pendekatan iki?

Kauntungan paling jelas sing kita entuk saka nggunakake konsep MVC yaiku pamisahan logika presentasi (antarmuka pangguna) lan logika aplikasi (backend).

Kauntungan kaloro yaiku divisi bagean server dadi loro: model cerdas ( eksekutor ) lan pengontrol ( pusat keputusan ).

Ing conto sadurunge, ana wayahe nalika controller bisa nampa dhaftar kosong buku dianjurake saka model lan arep apa karo. Secara teoritis, logika iki bisa dilebokake langsung menyang model.

Kaping pisanan, nalika njaluk buku sing disaranake, model bakal mutusake apa sing kudu ditindakake yen dhaptar kosong. Banjur aku kudu nambah kode ing panggonan sing padha, apa sing kudu ditindakake yen ana promosi saiki, banjur luwih akeh pilihan sing beda.

Banjur ternyata admin toko pengin ndeleng kepiye tampilan kaca pangguna tanpa promosi, utawa kosok balene, saiki ora ana promosi, nanging dheweke pengin ndeleng kepiye promosi ing mangsa ngarep. Lan ora ana cara kanggo iki. Mulane, diputusake kanggo misahake pusat keputusan (pengontrol) saka logika bisnis (model).

Saliyane ngisolasi tampilan saka logika aplikasi, konsep MVC nyuda kerumitan aplikasi gedhe. Kode kasebut luwih terstruktur, dadi luwih gampang kanggo njaga, nguji, lan nggunakake maneh solusi.

Ngerteni konsep MVC, sampeyan, minangka pangembang, ngerti ngendi sampeyan kudu nambah ngurutake dhaptar buku:

  • Ing tingkat query database.
  • Ing tingkat logika bisnis (model).
  • Ing tingkat logika bisnis (pengontrol).
  • Ing tampilan - ing sisih klien.

Lan iki dudu pitakonan rhetorical. Saiki, pikirake babagan ngendi lan kenapa sampeyan kudu nambah kode kanggo ngurutake dhaptar buku.

Model MVC klasik

Interaksi antarane komponen MVC diterapake kanthi beda ing aplikasi web lan aplikasi seluler. Iki amarga app web ora suwe, ngolah siji panjaluk pangguna lan metu, dene aplikasi seluler ngolah akeh panjalukan tanpa miwiti maneh.

Aplikasi web biasane nggunakake model "pasif", nalika aplikasi seluler nggunakake model "aktif". Model aktif, ora kaya sing pasif, ngidini sampeyan langganan lan nampa kabar babagan owah-owahan kasebut. Iki ora dibutuhake kanggo aplikasi web.

Mangkene carane interaksi komponen ing macem-macem model katon kaya:

Model MVC klasik

Aplikasi seluler (model aktif) aktif nggunakake acara lan mekanisme langganan acara. Kanthi pendekatan iki, tampilan ( deleng ) langganan owah-owahan model. Banjur, nalika ana sawetara acara (contone, pangguna ngeklik tombol), pengontrol kasebut diarani . Iku uga menehi model prentah kanggo ngganti data.

Yen sawetara data wis diganti, model kasebut nggawe acara babagan ngganti data kasebut. Kabeh tampilan sing wis langganan acara iki (sing penting kanggo ngganti data tartamtu) nampa acara iki lan nganyari data ing antarmuka.

Ing aplikasi web, samubarang diatur rada beda. Bentenane teknis utama yaiku klien ora bisa nampa pesen sisih server kanthi inisiatif server .

Mulane, pengontrol ing aplikasi web biasane ora ngirim pesen menyang tampilan, nanging menehi klien kaca anyar, sing sacara teknis tampilan anyar utawa malah aplikasi klien anyar (yen siji kaca ora ngerti apa-apa bab liyane) .

Saiki, masalah iki sebagian ditanggulangi kanthi nggunakake pendekatan ing ngisor iki:

  • Ajeg polling server kanggo owah-owahan kanggo data penting (sapisan menit utawa luwih).
  • WebSockets ngidini klien langganan pesen server.
  • Kabar push web saka sisih server.
  • Protokol HTTP/2 ngidini server miwiti ngirim pesen menyang klien.