多少豆应该够了?

dar*_*ain 1 jsf javabeans java-ee

我是德国大学的本科学生.
我有一个团队编程课程..我们必须使用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>
Run Code Online (Sandbox Code Playgroud)

实际上:

  • Ever Site是一个Bean
  • 我们有3个应用豆
  • 我只使用1个会话Bean

我认为他们错过了Beans的目的.(是他们?还是我错了?!)
我怎样才能让他们清楚...... 1会话Bean是(或可能)足够?

Sim*_*ann 10

它看起来不像豆子太多,但当然这取决于豆子做什么以及如何使用它们."每个视图一个bean"规则很常见,通常没有任何问题.当然,如果你可以编写一些更通用的bean并且可以在很多/所有视图上使用,你当然应该这样做,只是尽量保持其目的清晰并专注于单个任务.

大多数bean都是请求范围的这一事实很好.只有在用户会话的整个持续时间内必须保持某种状态的bean才应该被放入会话范围(因此名称).这也使每会话内存消耗保持在较低水平.应用程序范围通常用于必须创建一次并由站点的所有用户使用的bean.像全局变量/单例一样,你应该谨慎使用它们.

但是关于你的想法,一个会话bean就足够了:没有一般规则,有多少bean必须在哪个范围内.设计和开发bean,然后决定他们需要在哪个范围内.正如我所说,会话范围中的bean数量很可能低于请求范围中的bean数量,但如果bean必须在会话范围内才能正常工作,那么您不应该害怕它.

不要试图将所有东西都压缩到一个会话bean中,只是因为你想在会话范围内只有一个bean.这将被称为上帝对象,这是一种反模式.

例如,您有一些存储在数据库中的用户信息(例如全名,状态,角色......),您希望在用户登录时显示在所有页面上(如此处顶部的灰色栏)所以).这可以作为会话范围的bean实现,它可以在您的所有页面上使用(或者更好,在每个页面上包含的某些标题中).用户登录后立即创建此bean,并从数据库中只提取一次信息.

在在线商店中,可以使用另一个会话范围的bean来存储用户的购物篮.另一个会话范围的bean可用于管理单独的购物清单......

除此之外,我想评论您和您的团队使用的命名规则/风格:

  • 你应该决定一种语言(最好是英语)并坚持下去,所以没有像"PasswordVergessen"那样的类/方法/变量名
  • 每个类/方法/变量都应该有一个描述性和自我解释的名称,所以不要使用像"ApplicationBean1"这样的东西
  • 尝试将faces-config组织成块(与bean定义分开的导航规则等)