首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多少豆子就够了?

多少豆子就够了?
EN

Stack Overflow用户
提问于 2009-06-22 16:51:49
回答 2查看 1.2K关注 0票数 1

我是德国一所大学的本科生。

我有一个团队编程课程..。我们必须使用JavaEE/JSF来创建一个社交网站。就像LinkedIn。

不管怎么说,我的团队创造了很多豆子。但IMHO太过分了。

代码语言:javascript
复制
    <?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
  • 我只使用了一个会话Bean

我认为它们符合豆类的目的。(它们是吗?还是我错了?!)

我怎么才能说清楚..。1会话Bean足够(或可能)足够了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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可以用于管理单独的购物列表..。

除此之外,我想评论一下您和您的团队使用的命名规则/样式:

  • 您应该选择一种语言(最好是英语)并坚持使用它,这样就没有像"PasswordVergessen“这样的类/方法/变量名称。
  • 每个类/方法/变量都应该有一个描述性和自我解释的名称,所以不要使用像"ApplicationBean1“这样的名称。
  • 尝试将faces-config组织成块(将导航规则与bean定义分离,等等)。
票数 10
EN

Stack Overflow用户

发布于 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的数量就无关紧要。干杯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1028303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档