ในกรอบ JSF MVC ใครคือ Model, View และ Controller?
ในกรอบ JSF MVC ใครคือ Model, View และ Controller?
คำตอบ:
ขึ้นอยู่กับมุมมอง (เล่นสำนวนเจตนา)
ในภาพสถาปัตยกรรมขนาดใหญ่รหัส 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 . ข้อจำกัดความรับผิดชอบด้านลิขสิทธิ์: หนังสือนี้เขียนโดยฉันและฉันเป็นผู้สร้างภาพ
<h:inputText value="#{register.username}">
แทน<h:inputText value="#{register.user.name}">
.
M odel จะเป็นของคุณManagedBean
V Iew จะjsp
, XHTML
(ที่ดีที่คุณสามารถรองรับมุมมองที่หลากหลายที่นี่)
C ontroller จะเป็นFacesServlet
อัปเดตหวังว่าภาพนี้จะช่วยได้มากขึ้น
FacesServlet
เป็นคอนโทรลเลอร์มากกว่าฉันไม่สามารถขยายได้ ฉันไม่มีเครื่องควบคุมของตัวเอง ... ฉันเห็นด้วยกับ Shervin ว่า Managed Beans คือผู้ควบคุม เชอร์วินโพสต์คำตอบทางเลือกของคุณเองได้อย่างไร?
FacesServlet
ซึ่งมีการควบคุม
faces servlet จัดการวงจรชีวิตของใบหน้าดังนั้นในแง่นี้จึงเป็นตัวควบคุมที่รวมกับรหัสของคุณเองที่อาจถูกเรียกในแต่ละช่วงอายุการใช้งาน
Java Server Faces เป็นเว็บเฟรมเวิร์ก MVC ซึ่งส่วนประกอบ MVC มีดังต่อไปนี้
Model - เป็นคลาส bean ที่มีการจัดการซึ่งมีคำอธิบายประกอบ @ManagedBean ซึ่งมีคุณสมบัติในการเก็บข้อมูลและตัวรับและตัวตั้งค่าตามลำดับ คลาส bean ที่มีการจัดการยังสามารถมีตรรกะทางธุรกิจสิ่งเหล่านี้เรียกอีกอย่างว่าถั่วสำรองซึ่งอาจมีขอบเขตที่แตกต่างกันเช่นคำขอเซสชันแอปพลิเคชัน
ดู - ส่วนต่อประสานผู้ใช้ที่แสดงต่อไคลเอ็นต์เช่นไฟล์. xhtml รับข้อมูลจากถั่วที่มีการจัดการและแสดงผลเป็นการตอบสนอง
คอนโทรลเลอร์ - javax.servlet.webapp.FacesServlet เป็นคลาสคอนโทรลเลอร์แบบรวมศูนย์ซึ่งโดยพื้นฐานแล้วเป็น servlet คำขอใด ๆ ที่มาถึง JSF จะไปที่ตัวควบคุม FacesServlet ก่อน ไม่เหมือนกับ JSP ที่เราเขียนคลาสคอนโทรลเลอร์ของเราเองใน JSF นั้น servlet คอนโทรลเลอร์เป็นส่วนที่คงที่ของเฟรมเวิร์กและเราไม่ได้เขียนมัน
กระแส MVC