我是德国大学的本科学生 我有一个团队编程课程..我们必须使用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>
实际上:
我认为他们错过了Beans的目的。(是吗?还是我错了?!)
我怎样才能让它们清楚...... 1会话Bean是(或可能)足够吗?
答案 0 :(得分:10)
它看起来不像豆子太多,但当然这取决于豆子做什么以及如何使用它们。 “每个视图一个bean”规则很常见,通常没有任何问题。当然,如果你可以编写一些更通用的bean并且可以在很多/所有视图上使用,你当然应该这样做,只是尽量保持其目的清晰并专注于单个任务。
大多数bean都是请求范围的这一事实很好。只有在用户会话的整个持续时间内必须保持某种状态的bean才应该被放入会话范围(因此名称)。这也使每会话内存消耗保持在较低水平。应用程序范围通常用于必须创建一次并由站点的所有用户使用的bean。像全局变量/单例一样,你应该谨慎使用它们。
但是关于你的想法,一个会话bean就足够了:没有一般规则,有多少bean必须在哪个范围内。设计和开发bean,然后决定他们需要在哪个范围内。正如我所说,会话范围中的bean数量很可能低于请求范围中的bean数量,但如果bean必须在会话范围内才能正常工作,那么你不应该害怕它。 / p>
不要试图将所有东西都压缩到一个会话bean中,只是因为你想在会话范围内只有一个bean。这称为God Object,anti-pattern。
因此,例如,您有一些存储在数据库中的用户信息(例如全名,状态,角色......),您希望在用户登录时在所有页面上显示该信息(例如,在这里SO)。这可以作为会话范围的bean实现,它可以在您的所有页面上使用(或者更好,在每个页面上包含的某些标题中)。用户登录后立即创建此bean,并从数据库中只提取一次信息。
在在线商店中,可以使用另一个会话范围的bean来存储用户的购物篮。另一个会话范围的bean可用于管理单独的购物清单...
除此之外,我想评论一下你和你的团队使用的命名规则/风格:
答案 1 :(得分:1)
我想说西蒙已经非常恰当地回答了你的问题并且没有多少理由掩饰。除了所说的所有东西;我只想说重点应放在OO设计上,因为它应该真正控制豆子的数量,而不是头脑中的基本数字。
紧密耦合的3 bean代码与包含2000 bean的代码一样糟糕,没有任何实际用途。这是必须指导您的设计。
我可能偏离了观点;但是如果你真的想看看你的咖啡豆应该如何控制,那么请阅读杰夫湾写的“The Thoughtworks Anthalogy”章节“对象健美操”。编程的简单规则是(其中一些甚至是不可信的):) 1.每种方法仅使用一级缩进 2.不要使用else关键字 3.包装所有基元和字符串 4.每行只使用一个点 5.不要缩写 6.保持实体小 7.不要使用任何具有2个以上实例变量的类 8.使用头等集合 9.不要使用任何getter setter属性。 (我知道JSF无法正常工作)
但是根据这些规则,你会遇到一些真正的挑战。但是你会发现即使bean的数量巨大,你也可以完美地设计代码。 :)
简而言之,我同意你应该摆脱反模式,但大多数情况下,一个会话bean就足够了,所有bean都有请求范围。只要您具有设计良好且灵活的代码,bean的数量就不重要了。 欢呼声。