2012-09-13 11 views
4

나는 이것을 잠시 생각해 왔으며 프리젠 테이션 계층을위한 JSF 프로젝트에서 콩/클래스를 구성하는 방법에 대한 모범 사례를 아직 내놓지 않았다. 분명히 많은 요소들이 작용하고 있지만, 나는 토론하고 싶다. 여기에 내 생각의 라인이있다 :JSF에서 백킹 빈 조직

뷰 페이지 (데이터보기)와 편집 페이지 (데이터 추가, 업데이트, 삭제)가 포함 된 기본 JSF (여전히 불행히도 JSF 1.xx에 붙어있다) 애플리케이션을 생각 해보자.). 여기에 내가 프로젝트를 구성 할 방법은 다음과 같습니다

  • 보기 관련 물건 (등, 논리 렌더링 상태를 저장) :

    요청을 BackingBean을 범위. 하나의 요청으로 만 필요한 항목

  • 작업, 액션 리스너 및 값 변경 리스너. 둘 이상의보기에 적용 할 수있는 경우 해당보기로 구분할 수 있습니다. 하나 개의 요청보다 더 오래 남아있을 필요가

    • 아무것도 :

  • 는 세션 BackingBean을 범위. 데이터베이스 데이터, SelectItems 등
  • 이 빈은 요청 빈에 주입하고, 데이터의 저장 인스턴스는

데이터 개체 개체 :

  • 것은이가 이해하지 않는 것을 데이터 오브젝트를 bean으로 작성하여 별도로 저장합니다. 이것은 User, Book, Car, 페이지에 표시 할 개체와 같은 것입니다. 목적은 등)과 같은 getFormattedName (같은 뷰 헬퍼 메소드를 포함 할 수 있습니다

DAO :

  • 비즈니스 로직 계층의 모든 상호 작용을 처리하는 비 빈 객체입니다. 데이터 bean을로드하고 제출 등을 준비합니다. 보통이 메소드를 공용 정적 메소드로 만듭니다.

컨버터, 검사기 :

  • 별도의 파일

이 모든 것을이 평균 JSF 응용 프로그램에 필요한 것 같다. 나는 이것을 통해 읽었습니다 : http://java.dzone.com/articles/making-distinctions-between, 여기에 답장 : JSF backing bean structure (best practices), 그러나 나는 우리가 완벽한 그림을 얻은 것처럼 느껴본 적이 없었습니다. BalusC의 응답은 도움이되었지만 전체 앱을 다루는 것 같지 않았습니다. 네 생각을 말해봐!

+1

나는 그 질문에 대답 한 사람이 아니 었습니다. 더욱이 나는 개인적으로 그 대답에 동의하지 않는다. 또한 http://stackoverflow.com/questions/7223055/distinction-between-different-types-of-managed-beans도 참조하십시오.이 답변을 보완하기 위해 다음과 같은 답변이 도움이 될 수 있습니다. http://stackoverflow.com/questions/ 7031885/bean-scope 선택 방법 True, JSF 2.x, JSF 1.x에도 똑같은 원리가 적용됩니다. – BalusC

+0

그 첫 번째 링크는 내가 링크하려는 의미입니다. 나는 거기에 당신의 대답을 따라 조금 문제가있었습니다. 만약 내가 올바르게 이해했다면, 모델 빈은 내 데이터 객체와 비슷합니다. 컨트롤러/관리 빈은 백킹 빈과 비슷한 하나의 빈이어야합니다. 세션 양을 최소화하기 위해 두 개로 나눕니다. 데이터. 정확하니? – bhouse

답변

1

나는 그러나 나는 다르게 몇 가지 일을 할 것입니다, 당신은 일반적으로 궤도에 생각 :

  1. 내가 당신의 DAO 층 걸릴 것 두 개의 별도의 층으로, 하나 개의 순수한 DAO 층을 분할하는 단지 다양한 소스 (예 : 데이터베이스 호출, 웹 서비스 호출, 파일 읽기 등)의 데이터를 가져 오는 작업을 담당합니다.그런 다음 DAO 호출뿐만 아니라 모든 추가 계산, 알고리즘 또는 기타 JSF 뷰에 특정한 일반 비즈니스 로직에 대한 통과를 포함하는 비즈니스 로직 계층을 갖게됩니다.

  2. MVC 패턴에서 ManagedBean은 Controller 역할을 수행하므로 프리젠 테이션 논리 (뷰를 조작하거나 다양한 View 구성 요소간에 상호 작용하는 로직)의 저장소 여야합니다. 또한 비즈니스 논리를 이벤트 비헤이비어에도 연결합니다.

  3. 비즈니스 논리 또는 DAO 계층에 공용 정적 메서드를 사용하지 않습니다. 자동 유닛 테스트에는 적합하지 않으며 CDI 나 Spring과 같은 Dependency Injection 프레임 워크를 앱이 사용하는 것을 방지합니다. 대신 BO 및 DAO의 인터페이스를 작성한 다음 구현 클래스를 작성하십시오.

  4. 참고로 CDI 또는 Spring과 같은 Dependency Injection Framework를 사용하십시오. 단위 테스트뿐만 아니라 ManagedBeans에도 Business Logic 객체 또는 DAO를 자동 삽입 할 수 있습니다. 또한 응용 프로그램의 다른 레이어에 코드를 연결하지 않고 구현 또는 DAO를 스왑 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! 나는 내 직책에서 분명하지 않을 수도 있다고 생각하지만 프로젝트를 세 단계로 나누었습니다. 그래서 내 게시물은 프레젠테이션 계층에 관한 것입니다. 또한 데이터베이스 호출과 그런 것들을하는 스프링 프레임 워크의 '비즈니스'티어가있다. 내 "DAO"는 기본적으로 Business Objects를 가져 와서 내 프레젠테이션 계층 데이터 개체에 매핑하는 클래스입니다. 그런 다음 비즈니스 계층으로 다시 제출할 때 다른 방법을 사용합니다. – bhouse

+0

포인트 넘버 2에 관해서 : 저는 뒷받침 빈이 컨트롤러의 역할을해야한다는 것에 동의합니다. 이것이 제가 요청한 bean이 할 수있는 범위입니다. 또한 당신이 말한 것처럼 뷰 조작이나 상호 작용을 제공 할 수 있습니다. – bhouse

+0

그러면 정확히 JSF에서 Model의 역할을 수행하고있는 것은 무엇입니까? –