Komponen apa yang MVC dalam kerangka kerja JSF MVC?

Jawaban:

150

Ini tergantung pada sudut pandang (pun intented).

Dalam gambaran arsitektur besar, kode JSF Anda sendiri adalah V :

M - Domain bisnis / Lapisan layanan (mis. EJB / JPA / DAO)
V - Kode JSF Anda
C - FacesServlet

Dalam gambar pengembang, arsitektur V dapat dibagi seperti di bawah ini:

M - Entitas
V - Facelet / halaman JSP
C - Kacang yang dikelola

Dalam gambar klien yang lebih kecil, pengembang V pada gilirannya dapat dibagi seperti di bawah ini:

M - Pohon komponen JSF
V - Output HTML yang dirender
C - Klien (browser web)

Dalam gambar JavaScript yang lebih kecil, klien V pada gilirannya dapat dibagi seperti di bawah ini:

M - Pohon DOM HTML
V - Presentasi visual
C - Fungsi pendengar acara (interaksi pengguna akhir dan Ajax)

Jadi pada dasarnya ini adalah M (M (M (MVC) C) C) C;)

Perhatikan bahwa beberapa permulaan dan bahkan beberapa tutorial —sangat mendasar— menggabungkan / menyalin / meratakan properti entitas dalam kacang yang dikelola, yang secara efektif akan membuat pengontrol menjadi model. Tak perlu dikatakan bahwa ini adalah desain yang buruk (yaitu bukan desain MVC yang bersih).

Cuplikan kode dalam jawaban berikut menggambarkan pendekatan MVC yang benar:

Dalam buku The Definitive Guide to JSF in Java EE 8 , di bab 8 "Backing beans", halaman 276, diagram Venn di bawah ini digunakan untuk mengilustrasikan posisi kacang pendukung dalam paradigma MVC dalam konteks yang relevan dengan pengembang JSF . Penafian hak cipta: buku ditulis oleh saya dan gambar dibuat oleh saya.

masukkan deskripsi gambar di sini

BalusC
sumber
+1 Sepenuhnya setuju dengan kedua filosofi tersebut, umumnya lebih banyak kasus dengan lengkungan besar. lihat dalam proyek waktu nyata.
Jigar Joshi
2
tidak mendapatkan pelesetan, masih memiliki upvoat
Nick Russler
@JeffLee di tempat kerja saya, kami melihatnya sebagai kacang yang dikelola mengontrol tampilan xhtml. Kacang yang dikelola dapat berbicara dengan kode model untuk mendapatkan dan menyimpan entitas tergantung pada apa yang dibutuhkan tampilan.
djeikyb
5
@Jeff: hanya jika Anda menggabungkan properti model di dalamnya. Seperti dalam, menggunakan, <h:inputText value="#{register.username}">bukan <h:inputText value="#{register.user.name}">.
BalusC
Sangat setuju dengan jawaban ini yang merugikan @Jigar's. IMO, kacang yang dikelola lebih dari sekadar model. Mereka semacam perpanjangan dari FacesServlet, tempat semua interaksi terjadi. Juga mereka dapat menahan status, tetapi lebih banyak C daripada M.
Xtreme Biker
36

M odel akan menjadi milik AndaManagedBean

V iew akan jsp, XHTML(baik Anda dapat menampung berbagai pandangan di sini)

C ontroller akanFacesServlet

Perbarui, semoga gambar ini lebih membantu

masukkan deskripsi gambar di sini

Jigar Joshi
sumber
4
+1, Masuk akal, meskipun saya mungkin akan mengatakan Model Anda adalah Entitas (jika ada) dan Pengontrolnya adalah Kacang Terkelola (selain FacesServlet)
Shervin Asgari
@ Jigar baik, jika FacesServletpengontrol daripada saya tidak bisa memperpanjangnya. Saya tidak bisa memiliki pengontrol sendiri ... Saya setuju dengan Shervin bahwa Kacang Terkelola adalah Pengontrol. Shervin, bagaimana kalau memposting jawaban alternatif Anda sendiri?
yegor256
1
itu adalah penyamaran FacesServletyang mengendalikan.
Jigar Joshi
@Jigar wikipedia mengatakan bahwa "Pengontrol menerima masukan dari pengguna dan menginstruksikan model dan area pandang untuk melakukan tindakan berdasarkan masukan tersebut." Saya ragu FacesServlet "menginstruksikan model", bukan?
yegor256
4
Undercover FacesServlet menerima semua data (pada lapisan di atas disebut bean) dari permintaan, sesi, konteks aplikasi dan memprosesnya.
Jigar Joshi
-1

Java Server Faces adalah kerangka web MVC dimana komponen MVC adalah sebagai berikut,

  1. Model - Ini adalah kelas kacang yang dikelola dijelaskan dengan @ManagedBean, yang memiliki sifat untuk menyimpan data dan getter masing-masing dan setter. Kelas kacang terkelola juga dapat berisi logika bisnis, yang juga dikenal sebagai kacang pendukung yang dapat memiliki cakupan berbeda seperti permintaan, sesi, aplikasi.

  2. Tampilan - Antarmuka pengguna yang ditampilkan ke klien yaitu file .xhtml. Itu mendapatkan data dari kacang yang dikelola dan itu diberikan sebagai respons.

  3. Kontroler - javax.servlet.webapp.FacesServlet adalah kelas controller terpusat yang pada dasarnya merupakan servlet. Setiap permintaan yang datang ke JSF terlebih dahulu masuk ke pengontrol FacesServlet. Tidak seperti JSP di mana kita menulis kelas pengontrol kita sendiri, di JSF, servlet pengontrol adalah bagian tetap dari kerangka kerja dan kita tidak menulisnya.

Aliran MVC-

masukkan deskripsi gambar di sini

Hetal Rachh
sumber
Ini identik dengan 36 pertanyaan dengan suara positif. Jika menurut Anda jawabannya bisa dibuat lebih jelas, harap edit
Kukeltje
@Kukeltje Saya yakin jawaban saya memiliki lebih banyak penjelasan daripada hanya penamaan komponen MVC.
Hetal Rachh
Sedikit penjelasan lagi ... 1: tidak terlalu karena 'berisi data' bukanlah yang terbaik (harus dalam entitas), businesslogic, bukan yang terbaik karena ini harus ada dalam layanan (lihat tautan tambahan di jawaban yang paling banyak dipilih) ), 2: tidak lebih 3: sedikit lebih banyak teks tetapi tidak ada gambar jawaban lain yang membuatnya lebih jelas daripada teks yang Anda tambahkan ...
Kukeltje
@Kukje Terima kasih, tetapi saya hanya pemula di JSF.
Hetal Rachh
Tidak masalah. Saya telah menggunakannya untuk waktu yang lama sekarang dengan kesuksesan besar. Dapatkan buku java ee 8 dan JSF karya Bauke Scholtz dan Arjan Thijms. Bacaan dan tutorial yang bagus, tetapi juga baca semua> 25 Tanya Jawab yang diberi suara positif di Stackoverflow mengingat keberadaannya dan mulai dengan jsf 2.3 dan
Kukeltje