簡體   English   中英

將JSF理解為MVC框架

[英]Understanding JSF as a MVC framework

我正在閱讀JSF,我覺得為什么JSF是一個MVC框架(或者至少哪個部分屬於哪個“字母”)我感到很困惑。

我看了一下這個問題: JSF MVC框架中哪些組件是MVC?

我在那里閱讀如果你不在聚合視圖中查看模型是你的實體,視圖是你的XHTML代碼而控制器是托管bean。 嗯......好的,但視圖通常不依賴於執行進一步的業務邏輯調用,這些調用返回一組實體,例如,描述是否仍然適合?

我讀過的一本書將其描述為托管bean,是Faces Servlet(Controller)用於調用業務層(Model)的某種“消息”bringer,然后XHTML代碼就是視圖。

有太多的解釋和差異,所以我不知道哪個或如何理解它。

在JSF和許多其他Web框架中,它通常不完全清楚的部分原因是MVC模式最初是為桌面應用程序設計的。

在桌面應用程序中,節點M,V和C是最大連接圖,這意味着每個部分可以與每個其他部分通信。 例如,如果模型更改,它可以將此更改推送到視圖。 如果桌面應用程序中存在多個視圖表示,則尤其可見。 更改一個,並實時查看其他更新。

由於Web應用程序的客戶端/服務器和請求/響應特性,經典MVC不會將1:1映射到大多數Web框架。

具體來說,在JSF中,映射如下:

  • 模型 - 服務/ DAO加上他們生產和消費的實體。 對此的入口點是托管bean,但在Java EE(JSF是其中的一部分)中,這些工件通常分別由EJB和JPA實現。
  • 視圖 - 將UI組件及其組成整頁。 這完全屬於JSF領域,分別由JSF UIComponent和Facelets實現。
  • 控制器 - 處理來自用戶的命令和傳入數據的交通警察,將其路由到正確的部分並選擇要顯示的視圖。 在JSF中,不會編寫這個控制器,但它已經由框架提供(它是FacesServlet )。

特別是最后一部分經常不太清楚:在JSF中你沒有實現一個控制器。 因此,支持bean或任何其他類型的托管bean 不是控制器。

第一部分(模型)也並不總是清楚地理解。 業務邏輯可以由EJB和JPA實現,但是從JSF的角度來看,值綁定引用的所有內容都是模型。 這也是JSF生命周期階段之一的名稱來自: Update Model 在此階段,JSF將UI組件中的數據推送到模型中。 從這個意義上講,(JSF)托管bean就是模型。

雖然JSF本身沒有明確定義這個概念,但是有一種經常重復使用的托管bean稱為支持bean

對於JSF,支持bean仍然是模型,但實際上它是位於模型,視圖和控制器中間的管道元素。 因為它執行一些可能被視為某些控制器任務的任務,所以這通常被誤認為是控制器。 但是,如前所述,這是不正確的。 它還可以執行一些模型任務,偶爾也可以執行一些視圖邏輯。

也可以看看:

它以極簡主義的形式出現:

  • 模型:用於持久性(Hibernate,JPA等)和數據建模(Java Bean)的任何東西。
  • 查看:xhtml,jsp等
  • 控制器:Mananaged Beans。

JSF使您能夠控制您的請求/響應。 您創建模型/視圖的方式並不直接連接到框架MVC概念。 這只是一個選擇問題。 MVC概念與代碼組織有關。

類似地,Struts是一個MVC框架,但它主要用作控制器。

我想我會幫助你更好地澄清你的想法。

關於托管bean思想的有趣之處在於它既可以用作模型(MVC模式),也可以用作控制器( 中介控制器MVC模式 ,也稱為模型視圖適配器),其中模型和視圖不相互作用直。

在后一種情況下,路由機制不是控制器,因為業務邏輯包含在托管bean中,而Model完全是域模型。 然后我們有:

  • 模型 - 包含域模型,在大多數情況下代表數據庫中的表,通過DAO持久化。

  • View - 連接到bean的ui組件;

  • Controller - 包含業務邏輯並處理視圖和模型之間通信的托管bean。

我認為有些人將中介控制器MVC混淆為普通的MVC,這會導致遇到不同的解釋。

我想,這里所有的東西都是正確的。 但是混淆的主要原因是混合了來自框架的mvc組件定義,這里是JSF,以及您在應用程序設計中定義的模型和控制器組件:

假設您從業務應用程序中的JSF更改為任何其他Web UI框架:您仍將擁有“業務模型”和“業務控制器”。 (在我們的項目中,我們只稱這些組件為“模型”和“過程”。)

這意味着什么:您不能將mvc用於整個應用程序體系結構的描述,而只能用於UI,或者您可能必須在完整的應用程序堆棧中接受許多控制器,類似組件的模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM