2012-05-14 63 views
6

我正在開發一個web項目,經過大量研究,我決定繼續使用JSF + Primefaces,Spring和Hibernate方法。在設計我的項目的架構我已經確定了以下方法:JSF-SPRING-HIBERNATE架構 - 支持bean相關的最佳實踐

演員 - > JSF + PrimeFaces頁--->輔助Bean - >服務豆 - >道 - >休眠

  • 服務Bean和DAO是具有依賴注入的spring bean。

我現在擔心的是,現在相對於後臺bean: 我打算使用多個後備豆取決於頁的我需要呈現類型的UI頁面。

現在例如:對於一個新的用戶註冊頁面我有UserProfile.xhtml使用UserBackingBean。 UserBackingBean在春天注入了UserServiceBean。 UserServiceBean由Spring注入UserDao。

現在在UserBackingBean中,當用戶從UserProfile.xhtml輸入表單數據時,我將不得不填充User.java域(ORM)對象。

a)最佳做法是什麼?我應該初始化UserBackingBean構造函數中的User.java嗎?這是正確的方法嗎?請建議是否有其他出路?

b)另外請建議上述架構,我已決定爲我的項目?這是正確的方法嗎?

回答

2

我遵循的一般規則是在服務bean中標記事務邊界,因此我不想在服務外修改hibernate POJO,因爲我不知道是否有一個事務已經在運行。所以從後臺bean我會調用服務層傳遞的參數,服務層需要建立休眠pojo並保存它,更新它...等。

另一種方法可以做到這一點你的支持bean實現一個由服務層定義的接口,然後將支持bean傳遞給服務層。例如。

public interface UserInfoRequest { 
    public String getName(); 
} 


@Service 
public class SomeSpringService { 

    @Transactional(.....) 
    public void registerNewUser(UserInfoRequest request) 
    { 

    } 

} 

public class SomeBackingBean implements UserInfoRequest { 

    private SomeService someSpringService; 

    public void someMethodBoundToSJF() 
    { 
     this.someSpringService.registerNewUser(this); 
    } 
} 

關於你的最後一個問題,我不是JSF的粉絲,我認爲JSF基本上是錯誤的,因爲它是一個服務器組件爲基礎的框架。所以我對JSF的爭論是針對基於服務器端組件的通用參數。

基於服務器端組件的主要缺陷是您不控制組件的輸出內容,這意味着您堅持使用組件的外觀,如果您希望看起來不同的東西需要自己編寫組件,或者您必須修改現有的組件。 Web瀏覽器目前正在迅速發展,添加了可以真正提高應用程序UI質量的新功能,但對於那些需要直接編寫HTML,CSS和JavaScript的功能以及服務器端組件更加困難。

客戶端組件體系結構在這裏比在服務器端執行組件要好得多。這是我推薦的堆棧。

客戶端架構:

  • jQuery的。JS - 基本libary讓所有的瀏覽器看起來是一樣的JavaScript
  • Backbone.js的+ underscore.js - 基於高級別客戶端組件體系結構
  • handlebars.js - 爲客戶端模板
  • Twitter的引導 - 以得到一個體面的啓動設置CSS的&部件

你寫HTML,CSS代碼和JavaScript組織爲跟使用AJAX服務器端 型號骨幹的意見。您可以完全控制客戶端用戶體驗,並擁有足夠的 結構來真正製作出好的可重用代碼。

服務器端架構:

  • 註解驅動的Spring MVC,服務和道(@Controller,@Service,@Repository)
  • 彈簧組件掃描與類型的自動裝配(@Autowired,@Inject)
  • AspectJ裝載時間織造或編譯時織造
  • 休眠
  • 的Tomcat 7
  • JSP作爲視圖高科技nology對Spring MVC的(是的,它cluncuky但你不會被創建 太多jsp頁面中,多爲USNG <%@inculde>指令

工具: - 春天工具套件 - JRebel的(讓你不t不得不啓動和停止服務器)它真的真的值得錢 - Tomcat 7