MVC ในเฟรมเวิร์ก JSF MVC มีส่วนประกอบใดบ้าง


คำตอบ:


150

ขึ้นอยู่กับมุมมอง (เล่นสำนวนเจตนา)

ในภาพสถาปัตยกรรมขนาดใหญ่รหัส JSF ของคุณเองคือV :

M - โดเมนธุรกิจ / ชั้นบริการ (เช่น EJB / JPA / DAO)
V - รหัส JSF ของคุณ
C - FacesServlet

ในภาพนักพัฒนาสถาปัตยกรรมVจะแบ่งออกได้ดังนี้:

M - Entity
V - Facelets / JSP page
C - Managed bean

ในภาพไคลเอนต์ขนาดเล็กผู้พัฒนาVสามารถแบ่งออกได้ดังนี้:

M - โครงสร้างส่วนประกอบ JSF
V - เอาต์พุต HTML ที่แสดงผล
C - ไคลเอนต์ (เว็บเบราว์เซอร์)

ในภาพ JavaScript ที่มีขนาดเล็กลงไคลเอนต์Vสามารถแบ่งออกได้ดังนี้:

M - HTML DOM tree
V - การนำเสนอภาพ
C - ฟังก์ชั่นฟังเหตุการณ์ (การโต้ตอบ enduser และ Ajax)

ดังนั้นจึงเป็น M (M (M (MVC) C) C) C;)

โปรดทราบว่าการเริ่มต้นบางอย่างและแม้แต่บทช่วยสอนขั้นพื้นฐานบางอย่างจะผสมผสาน / คัดลอก / ทำให้คุณสมบัติของเอนทิตีในถั่วที่มีการจัดการเรียบขึ้นซึ่งจะทำให้ตัวควบคุมเป็นแบบจำลองได้อย่างมีประสิทธิภาพ ไม่จำเป็นต้องพูดว่านี่เป็นการออกแบบที่ไม่ดี (เช่นไม่ใช่การออกแบบ MVC ที่สะอาด)

ข้อมูลโค้ดในคำตอบต่อไปนี้แสดงให้เห็นถึงแนวทาง MVC ที่ถูกต้อง:

ในหนังสือThe Definitive Guide to JSF in Java EE 8ในบทที่ 8 "Backing beans" หน้า 276 แผนภาพเวนน์ด้านล่างใช้เพื่อแสดงตำแหน่งของแบ็คกิ้งบีนในกระบวนทัศน์ MVC ภายในบริบทที่เกี่ยวข้องกับผู้พัฒนา JSF . ข้อจำกัดความรับผิดชอบด้านลิขสิทธิ์: หนังสือนี้เขียนโดยฉันและฉันเป็นผู้สร้างภาพ

ป้อนคำอธิบายภาพที่นี่


+1 เห็นด้วยอย่างยิ่งกับปรัชญาทั้งสองโดยทั่วไปแล้วจะเป็นกรณีที่มีซุ้มประตูขนาดใหญ่มากกว่า ดูในโครงการตามเวลาจริง
Jigar Joshi

2
ไม่ได้รับการเล่นสำนวนยังคงมีอารมณ์ดีอยู่
Nick Russler

@JeffLee ที่ทำงานของฉันเราเห็นว่ามันเป็นถั่วที่มีการจัดการควบคุมมุมมอง xhtml ถั่วที่ได้รับการจัดการสามารถพูดคุยกับรหัสโมเดลเพื่อรับและบันทึกเอนทิตีขึ้นอยู่กับสิ่งที่มุมมองต้องการ
djeikyb

5
@ เจฟฟ์: นั่นก็ต่อเมื่อคุณผสมผสานคุณสมบัติของโมเดลเข้าไป เช่นเดียวกับการใช้<h:inputText value="#{register.username}">แทน<h:inputText value="#{register.user.name}">.
BalusC

เห็นด้วยอย่างยิ่งกับคำตอบนี้ต่อความเสียหายของ @ Jigar's IMO ถั่วที่มีการจัดการเป็นมากกว่าแบบจำลอง เป็นส่วนขยายของ FacesServlet ซึ่งการโต้ตอบทั้งหมดเกิดขึ้น นอกจากนี้พวกเขายังสามารถถือสถานะได้ แต่มีมากกว่า C มากกว่า M.
Xtreme Biker

36

M odel จะเป็นของคุณManagedBean

V Iew จะjsp, XHTML(ที่ดีที่คุณสามารถรองรับมุมมองที่หลากหลายที่นี่)

C ontroller จะเป็นFacesServlet

อัปเดตหวังว่าภาพนี้จะช่วยได้มากขึ้น

ป้อนคำอธิบายภาพที่นี่


4
+1, มีเหตุผลแม้ว่าฉันอาจจะบอกว่า Model ของคุณคือเอนทิตี (ถ้าคุณมี) และ Controller คือ Managed Beans (นอกเหนือจาก FacesServlet)
Shervin Asgari

@Jigar ดีถ้าFacesServletเป็นคอนโทรลเลอร์มากกว่าฉันไม่สามารถขยายได้ ฉันไม่มีเครื่องควบคุมของตัวเอง ... ฉันเห็นด้วยกับ Shervin ว่า Managed Beans คือผู้ควบคุม เชอร์วินโพสต์คำตอบทางเลือกของคุณเองได้อย่างไร?
yegor256

1
มันเป็นสายลับFacesServletซึ่งมีการควบคุม
Jigar Joshi

@Jigar wikipediaกล่าวว่า "คอนโทรลเลอร์ยอมรับอินพุตจากผู้ใช้และสั่งให้โมเดลและวิวพอร์ตดำเนินการตามอินพุตนั้น" ฉันสงสัยว่า FacesServlet "สั่งโมเดล" ใช่หรือไม่
yegor256

4
Undercover FacesServlet รับข้อมูลทั้งหมด (ที่เลเยอร์ด้านบนเรียกว่า bean) จากคำขอเซสชันบริบทของแอปพลิเคชันและประมวลผล
Jigar Joshi


-1

Java Server Faces เป็นเว็บเฟรมเวิร์ก MVC ซึ่งส่วนประกอบ MVC มีดังต่อไปนี้

  1. Model - เป็นคลาส bean ที่มีการจัดการซึ่งมีคำอธิบายประกอบ @ManagedBean ซึ่งมีคุณสมบัติในการเก็บข้อมูลและตัวรับและตัวตั้งค่าตามลำดับ คลาส bean ที่มีการจัดการยังสามารถมีตรรกะทางธุรกิจสิ่งเหล่านี้เรียกอีกอย่างว่าถั่วสำรองซึ่งอาจมีขอบเขตที่แตกต่างกันเช่นคำขอเซสชันแอปพลิเคชัน

  2. ดู - ส่วนต่อประสานผู้ใช้ที่แสดงต่อไคลเอ็นต์เช่นไฟล์. xhtml รับข้อมูลจากถั่วที่มีการจัดการและแสดงผลเป็นการตอบสนอง

  3. คอนโทรลเลอร์ - javax.servlet.webapp.FacesServlet เป็นคลาสคอนโทรลเลอร์แบบรวมศูนย์ซึ่งโดยพื้นฐานแล้วเป็น servlet คำขอใด ๆ ที่มาถึง JSF จะไปที่ตัวควบคุม FacesServlet ก่อน ไม่เหมือนกับ JSP ที่เราเขียนคลาสคอนโทรลเลอร์ของเราเองใน JSF นั้น servlet คอนโทรลเลอร์เป็นส่วนที่คงที่ของเฟรมเวิร์กและเราไม่ได้เขียนมัน

กระแส MVC

ป้อนคำอธิบายภาพที่นี่


คำถามนี้เหมือนกับคำถามที่โหวต 36 ข้อ หากคุณคิดว่าคำตอบนั้นชัดเจนมากขึ้นโปรดแก้ไข
Kukeltje

@Kukeltje ฉันเชื่อว่าคำตอบของฉันมีคำอธิบายมากกว่าแค่การตั้งชื่อส่วนประกอบ MVC
Hetal Rachh

คำอธิบายเพิ่มเติมเล็กน้อย ... 1: ไม่จริงเนื่องจาก 'มีข้อมูล' ไม่ใช่สิ่งที่ดีที่สุด (ควรอยู่ในเอนทิตี), ระบบธุรกิจไม่ใช่สิ่งที่ดีที่สุดเนื่องจากสิ่งเหล่านี้ควรอยู่ในบริการ (ดูลิงก์เพิ่มเติมในคำตอบที่มีการโหวตมากที่สุด ), 2: ไม่มาก 3: ข้อความเพิ่มขึ้นเล็กน้อย แต่ไม่มีภาพของคำตอบอื่นซึ่งชัดเจนกว่าข้อความที่คุณเพิ่ม ...
Kukeltje

@Kukeltje ขอบคุณ แต่ฉันเพิ่งเริ่มต้นกับ JSF
Hetal Rachh

ไม่มีปัญหา. ฉันใช้มานานแล้วและประสบความสำเร็จอย่างมาก จับมือกับหนังสือ java ee 8 และ jsf โดย Bauke Scholtz และ Arjan Thijms การอ่านและการสอนที่ยอดเยี่ยม แต่ยังอ่านทั้งหมด> 25 คำถามที่อัปเกรดแล้วใน Stackoverflow จำการมีอยู่ของพวกเขาและเริ่มต้นด้วย jsf 2.3 และ
Kukeltje
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.