NHibernate에서 리포지토리 패턴이 필요한 이유는 무엇입니까?


13

공식 NHibernate 기반 응용 프로그램을 읽고 있습니다.

튜토리얼이 훌륭하고 따르기 쉽지만 리포지토리 패턴이 사용되는 이유가 궁금합니다.

다양한에서 Add, Update, Remove의 메소드 ProductRepository구현 코드는 거의 동일합니다 - 그들은 모든 트랜잭션을 사용하고, 그 차이는 "고기"에 즉, 콜입니다 session.SaveINT Add, 방법 session.Deleteremove방법. ( 페이지에 HTML 앵커가 없지만 페이지와 같은 관련 코드를 검색 할 수 있습니다 public void Remove.public void Add )

그 코드는 "잘못된 느낌"입니다.

작성자가 리포지토리 패턴을 사용하는 이유는 NHibernate 사용을 시연하기위한 것입니까, 아니면 다른 이유입니까?

추신. 내 배경은 ActiveRecord를 사용하는 Ruby on Rails 출신이므로 NHibernate의 작동 방식 및 사용 방법을 이해하려고합니다.


1
ACtive Record 패턴을 선호한다면 Castle Active Record를 사용하여 NHibernate castleproject.org/activerecord
Ben Robinson

3
이것은 중요한 질문입니다. 사용 여부에 대한 논쟁이 있습니다. Ayende은 그것을 사용하지 그의 주장 쓴 저장소가 새로운 싱글입니다

답변:


10

저장소 패턴은 필요하지 않습니다. 다른 모든 패턴은 비즈니스 요구에 맞서 내려야하는 "건축"결정입니다. 일반적으로 리포지토리 패턴은 "Entity Persistance Ingorance"를 구현하는 데 사용됩니다. 즉, 엔터티는 저장 장치 (데이터베이스, XML, TextFile 등)에서 자신을 유지하는 방법에 대해 아무것도 모릅니다. 예를 들어 엔티티 주소가있는 경우 지속성 논리가 포함되지 않지만 (주소. 저장 또는 주소. 업데이트와 같은 것을 찾을 수는 없지만) 엔티티를 유지하는 저장소 메소드로 엔티티를 전달합니다. 변화


나는 그렇다고 생각합니다. NHibernate 세션 자체는 일종의 일반 저장소입니다. 따라서 추가 리포지토리를 추가하는 것은 일반적으로 세션 객체에 파사드를 추가하는 것 이상입니다.

사실 제 대답은 "저장소 패턴은 필요하지 않습니다 ..."와 같이 시작합니다. 그것은 비즈니스 요구에 대한 건축 적 의사 결정일 수 있습니다.

나는 그것에 동의합니다. 그러나 세션 자체가 저장소라는 점이 빠졌습니다.

9

리포지토리 패턴을 사용하면 DAL 코드를 호출하지 않고도 비즈니스 계층 코드를 테스트 할 수 있도록 데이터 액세스 계층을 조롱하는 이점이 있습니다. 다른 큰 장점이 있지만 이것은 나에게 매우 중요한 것 같습니다.


2
+1 ActiveRecord 패턴은 조롱을 위해 DAL을 분리하기가 매우 어려워 일반적으로 자체 데이터베이스가 필요한 단위 테스트 (이 경우 단위 테스트가 통합 테스트가 됨)로 끝납니다.
MattDavey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.