2009-06-22 54 views
1

我是德國大學的本科學生。
我有一個團隊編程課程..我們必須使用JavaEE/JSF來建立一個社交網站,比如LinkedIn。
無論如何,我的小組創造了很多豆子。哪個恕我直言,太多了。多少豆子應該夠了?

<?xml version='1.0' encoding='UTF-8'?> 

<!-- =========== FULL CONFIGURATION FILE ================================== --> 

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 
    <managed-bean> 
     <managed-bean-name>SessionBean1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.SessionBean1</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>ApplicationBean1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.ApplicationBean1</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>RequestBean1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.RequestBean1</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Hauptseite</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.Hauptseite</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>PasswordVergessen</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.PasswordVergessen</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>registery</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.registery</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Page1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.Page1</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <validator> 
     <validator-id>login.EmailValidator</validator-id> 
     <validator-class>Login.EmailValidator</validator-class> 
    </validator> 

    <managed-bean> 
     <managed-bean-name>Bewertung</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Bewertung</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Mitarbeiter</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Mitarbeiter</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Nachrichten</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Nachrichten</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Benutrzer</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Benutzer</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$MainPage</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.MainPage</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$NavigationBar</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.NavigationBar</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$PartnerProfilePage</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.PartnerProfilePage</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$PartnerProfileChange</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.PartnerProfileChange</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$ProfilePage</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.ProfilePage</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <navigation-rule> 
     <from-view-id>/Page1.jsp</from-view-id> 
     <navigation-case> 
      <from-outcome>case1</from-outcome> 
      <to-view-id>/view/MainPage.jsp</to-view-id> 
     </navigation-case> 
    </navigation-rule> 
    <navigation-rule> 
     <from-view-id>/view/MainPage.jsp</from-view-id> 
     <navigation-case> 
      <from-outcome>case1</from-outcome> 
      <to-view-id>/view/ProfilePage.jsp</to-view-id> 
     </navigation-case> 
    </navigation-rule> 
    <managed-bean> 
     <managed-bean-name>view$ProfileChange</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.ProfileChange</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
</faces-config> 

其實:

  • 自從網站是一個Bean
  • 我們有3個應用程序bean
  • 我只使用1會話Bean

我認爲他們missunderstood的目的豆(是他們?還是我錯了?)
我該如何讓他們清楚... th在1會話Bean是(或可能)足夠?

+0

某人的將不得不與他們豆類 – 2009-06-22 17:04:31

回答

10

它看起來並不像有太多豆子,當然要看是什麼豆子做的,如何使用它們。 「每個視圖一個bean」規則很常見,通常沒有任何問題。當然,如果你可以編寫一些更通用的bean,並且可以在很多/所有的視圖中使用,你當然應該這樣做,只是爲了保持目的清晰,並專注於單個任務。

的事實,大多數的豆類都是請求範圍是好的。只有在整個用戶會話期間必須保持某種狀態的bean才應該放入會話範圍(因此也就是名稱)。這也保持每會話內存消耗低。應用程序範圍通常用於必須創建一次並由您的站點的所有用戶使用的bean。像全局變量/單例一樣,你應該謹慎使用它們。

但你的想法,一個會話Bean就足夠了:沒有一般規則多少豆子必須在其範圍之內。設計和開發bean,然後決定他們需要的範圍。正如我所說,會話範圍內bean的數量很可能低於請求範圍內bean的數量,但如果bean必須處於會話範圍內才能正常工作,則不應該擔心。

不要試圖一切擠進一個單一的會話bean,只是因爲你想有隻有一個會話範圍豆。這將被稱爲God Object,這是一個anti-pattern

因此,例如,你有一些用戶信息存儲在一個數據庫(例如全名,地位,作用...),要當一個用戶登錄(如在灰色條紋上的所有網頁顯示SO的頂部)。這可以作爲一個會話範圍的bean來實現,它可以在所有頁面上使用(或者更好,在每個頁面中包含的某個頁眉中)。只要用戶登錄並從數據庫中僅提取一次信息,就會創建該bean。

在一個在線商店,另一個會話範圍的bean可以用於存儲用戶的購物籃。另一個會話範圍的bean可以用來管理一個單獨的購物清單......

除此之外,我想在命名規則/風格,你和你的團隊發表評論用途:

  • 你應該決定一個語言(最好是英文),並堅持下去,所以無級/方法/變量的名稱,如「PasswordVergessen」
  • 每類/方法/變量應該有一個描述性的和自地名釋義的名字,所以不要使用類似的財產以後「ApplicationBean1中」
  • 嘗試你們的臉,配置組織成塊(獨立來自bean定義的導航規則等)
+0

「它很可能在請求範圍比會話範圍豆的數量少豆的數量」一些嚴重的天然氣問題 - 你的意思是說這個其他各地的方式? – 2009-10-20 03:33:49

+0

@Mike:當然......我改變了它。 – 2009-11-01 19:45:22

1

我會說西蒙已經很好地回答了你的問題,並沒有多少理由掩飾。除了所有這些事情之外;我只想說重點應該放在面向對象的設計上,因爲它應該真正控制bean的數量,而不是頭腦中的基本數字。

緊密耦合的3代碼和包含2000代碼的代碼一樣糟糕,沒有真正的目的。這是必須引導你的設計。

我可能偏離了一點;但如果你真的想看看你的bean應該如何控制,那麼請閱讀Jeff Bay編寫的「Object Calisthenics」一章中的「The Thoughtworks Anthalogy」一章。編程的簡單規則是(其中有些甚至不可信):) 1.每種方法只使用一級縮進 2.不要使用else關鍵字 3.將所有基元和字符串換行 4.只能使用一個每行點號 5.不縮寫 6.保持實體較小 7.不要使用任何具有兩個以上實例變量的類 8.使用第一類集合 9.不要使用任何getter setter屬性。 (我知道這是行不通的JSF方式)

但是這些規則,你會與一些真正的挑戰來構成。但是你會看到,即使豆的數量很大,你的代碼設計也很完美。 :)

總之,我同意,你應該從反模式移開,但大多數時候一個會話bean是夠了,這是很好的有要求範圍內的所有豆。只要你有精心設計和靈活的代碼,豆的數量是無關緊要的。 乾杯。