我是德国一所大学的本科生。
我有一个团队编程课程..。我们必须使用JavaEE/JSF来创建一个社交网站。就像LinkedIn。
不管怎么说,我的团队创造了很多豆子。但IMHO太过分了。
<?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>实际上:
我认为它们符合豆类的目的。(它们是吗?还是我错了?!)
我怎么才能说清楚..。1会话Bean足够(或可能)足够了吗?
发布于 2009-06-22 17:33:20
它看起来不像有太多的bean,但当然它取决于bean做什么和它们是如何使用。“每个视图一个bean”规则非常常见,而且通常没有任何问题。当然,如果您可以编写一些更通用的bean,并且可以在许多/所有视图中使用,那么您当然应该这样做,只需设法使它们的目的清晰,并专注于单个任务。
大多数bean都是请求范围的,这是一个很好的事实。只有在整个用户会话期间必须保持某种状态的bean才应该被放入会话范围(因此是名称)。这也使每个会话的内存消耗保持较低。应用程序作用域通常用于必须创建一次并由站点的所有用户使用的bean。就像全局变量/单变量一样,您应该谨慎地使用它们。
但是,关于一个会话bean就足够的想法:没有一般规则,必须有多少个bean在哪个范围内。设计和开发bean,然后决定它们需要的范围。正如我所说的,会话范围中的bean数量很可能低于请求范围中的bean数,但是如果一个bean必须在会话范围内才能正常工作,那么您不应该害怕它。
不要试图将所有内容压缩到单个会话bean中,仅仅是因为您希望会话范围中只有一个bean。这将被称为上帝对象,这是一个反模式。
例如,您有一些用户信息(例如全名、状态、角色.)存储在数据库中,当用户登录时,您希望在所有页面上显示该数据库(例如,此处顶部的灰色栏)。这将是您可以作为会话作用域bean实现的东西,它可以在所有页面上使用(或者更好的是,在包含在每个页面中的某个标题中)。只要用户登录并从数据库中只获取一次信息,就会创建这个bean。
在在线商店中,可以使用另一个会话作用域bean来存储用户的购物篮。还有一个会话作用域bean可以用于管理单独的购物列表..。
除此之外,我想评论一下您和您的团队使用的命名规则/样式:
发布于 2009-06-24 13:44:31
我想说的是,西蒙对你的问题回答得非常恰当,几乎没有什么可掩盖的地方。除了所有上述的事情,我只想说,重点应该放在OO设计上,因为这应该真正控制bean的数量,而不是头脑中一个基本的数字。
紧密耦合的3bean代码与包含2000个bean的代码一样糟糕,没有真正的用途。它的设计必须指导你。
我可能偏离了重点,但如果你真的想看看你的豆子应该如何控制,那就读一下杰夫·贝写的"思想作品选集“一章”对象健美操“。编程的简单规则是: 1.在每个方法2中只使用一个缩进级别。不要使用setter关键字3。包装所有原语和字符串4。每行只使用一个点。不要缩写为6。将实体保持为小7。不要使用任何包含超过2个实例变量的类。使用第一类集合9。不要使用任何getter setter属性。(我知道它不会以JSF的方式工作)
但有了这些规则,你将面临一些真正的挑战。但是您将看到,尽管bean的数量很大,但是您的代码设计得非常好。:)
总之,我同意您应该远离反模式,但是大多数情况下,一个会话bean就足够了,拥有所有具有请求范围的bean是很好的。只要您有良好的设计和灵活的代码,bean的数量就无关紧要。干杯。
https://stackoverflow.com/questions/1028303
复制相似问题