2009-06-22 4 views
1

저는 독일 대학의 학부생입니다.
저는 프로그래밍 과정을 가지고 있습니다. 소셜 네트워킹 사이트를 만들기 위해 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> 

:

  • 적 사이트 나는 그들이의 목적을 missunderstood 생각 우리는
  • 난 그냥 1 세션 빈

를 사용하는 3 응용 프로그램 콩을 가지고 콩

  • 입니다 콩 (그들이 했습니까? 틀렸습니까?)
    내가 어떻게 그들을 명확하게 할 수 있습니까? 1 Session Bean은 충분합니까 (또는있을 수 있습니까?)?

  • +0

    Someones는 모든 콩에 심각한 가스 문제가있을 수 있습니다. –

    답변

    10

    너무 많은 콩이있는 것처럼 보이지 않지만 물론 콩이하는 일과 사용 방법에 달려 있습니다. "뷰 당 하나의 빈"규칙은 매우 일반적이며 일반적으로이 점에 아무런 문제가 없습니다. 물론 더 일반적이며 많은/모든 뷰에서 사용할 수있는 빈을 작성할 수 있다면 분명히 목적을 명확히하고 단일 태스크에만 집중하도록 노력해야합니다.

    콩의 대부분이 요청 범위가 있다는 사실이 좋습니다. 사용자 세션의 전체 기간 동안 어떤 상태를 유지해야하는 빈 만이 세션 범위 (그러므로 이름)에 놓여 져야한다. 이것은 또한 세션 당 메모리 소비를 낮게 유지합니다. 응용 프로그램 | 위는 일] 적으로 작성되어야하며 사이트의 모든 사용자가 사용하는 bean에 대해 사용됩니다. 전역 변수/싱글 톤처럼, 당신은 그것들을 조심스럽게 사용해야합니다.

    그러나 하나의 세션 빈만큼 충분하다는 생각에 대해 : 얼마나 많은 빈이 어떤 범위에 있어야하는지에 대한 일반적인 규칙은 없습니다. 빈을 설계하고 개발 한 다음 필요한 빈도를 결정하십시오. 앞서 말했듯이 세션 범위의 빈 수가 요청 범위에있는 빈의 수보다 낮을 가능성은 매우 높지만 bean이 제대로 작동하려면 세션 범위에 있어야하는 경우 두려워하지 않아야합니다.

    세션 범위에 하나의 bean 만 있기를 원하기 때문에 모든 것을 단일 세션 bean으로 압축하지 마십시오. 이것은 God Object으로, anti-pattern입니다.

    예를 들어 데이터베이스에 저장된 사용자 정보 (예 : 성명, 상태, 역할 ...)는 사용자가 로그인했을 때 모든 페이지에 표시하려고합니다 (예 : 전체 이름, 상태, 역할 ...) 여기에 SO). 이것은 모든 페이지에서 (또는 모든 페이지에 포함 된 일부 헤더에서 사용되는) 세션 범위 bean으로 구현할 수있는 것입니다. 이 빈은 사용자가 로그온하고 데이터베이스에서 정보를 한 번만 가져 오는 즉시 작성됩니다.

    온라인 상점에서 사용자의 쇼핑 바구니를 저장하기 위해 다른 세션 범위 Bean을 사용할 수 있습니다. 그렇지만 또 다른 세션 스코프 된 빈은 별도의 쇼핑 목록을 관리하는 데 사용될 수 있습니다 ...그 외에도에서

    , 나는 명명 규칙/스타일 당신과 당신의 팀에 대해 언급하고 싶은 것은 사용

    • 당신은 하나 개의 언어 (양호하게는 영어)을 결정하고, 그래서 아무 클래스/그것에 충실해야 모든 클래스/메소드/변수 설명 및 자기 explaning 이름을 가지고 있어야하므로 블록으로 당신의 얼굴-설정을 구성 할 "ApplicationBean1"
    • 시도처럼 뭔가를해야만 사용하지 않는
    • "PasswordVergessen"와 같은 방법/변수 이름 (별도의 bean 정의로부터의 네비게이션 규칙 등)
    +0

    "요청 범위가 콩의 수를 세션 범위의 콩 수보다 적게 가질 가능성이 매우 큽니다"-이 말은 다른 방법으로 말한 것입니까? ? –

    +0

    @ 마이크 : 물론 ... 나는 그것을 바꿨다. –

    1

    나는 사이먼이 당신의 질문에 매우 적절하게 대답했으며 은폐 할 수있는 근거는 거의 없다고 말할 것입니다. 모든 말한 것 이외에; 나는 콩의 수를 통제해야하고 머리 속에 초보적 인 모습을 나타내지 말아야하므로 초점이 객체 지향 설계에 있어야한다고 말하고 싶다.

    단단히 결합 된 3 개의 빈 코드는 실제로 목적이없는 2000 개의 빈을 포함하는 코드만큼 나쁩니다. 그것은 당신을 안내해야하는 디자인입니다.

    포인트에서 벗어날 수 있습니다. 하지만 콩을 어떻게 제어해야하는지 정말로보고 싶다면 제프 베이가 쓴 "012. 체내 체질"에세이 "The Thoughtworks Anthalogy"장을 읽으십시오. 프로그래밍을위한 간단한 규칙은 다음과 같습니다 (일부는 믿을 수조차하지 않습니다). 1. 메서드 당 들여 쓰기 수준을 하나만 사용하십시오. else 키워드를 사용하지 마십시오. 3. 모든 프리미티브 및 문자열 줄 바꿈 4. 하나만 사용하십시오 줄당 점 수 5. 축약하지 마십시오 6. 엔티티를 작게 유지하십시오. 7. 인스턴스 변수가 2 개 이상인 클래스를 사용하지 마십시오. 8. 최상위 컬렉션 을 사용하십시오. 9. getter setter 속성을 사용하지 마십시오. (JSF 방식으로 작동하지 않는다는 것을 알고 있습니다)

    그러나 이러한 규칙을 사용하면 실제적인 문제점을 안고 있습니다. 그러나 빈 수가 많더라도 완벽하게 잘 설계된 코드를 가지고 있음을 알 수 있습니다. :)

    간단히 말해, 안티 패턴에서 벗어나야하지만 대부분의 세션 빈은 충분하고 요청 범위가있는 모든 빈을 갖는 것이 좋다는 데 동의합니다. 콩의 수는 당신이 잘 설계되고 유연한 코드를 가지고 있다면 중요하지 않습니다. 건배.

    +0

    다음은 "Object Calisthenics"에세이에 대한 직접 링크입니다. http://www.xpteam.com/jeff/writings/objectcalisthenics.rtf –