데이터베이스에 저장된 일부 데이터에 액세스하는 WCF 서비스를 설계하고 있습니다.데이터에 액세스하는 WCF 서비스의 적절한 디자인
DB에 대한 실제 액세스는 일부 ORM 계층에서 처리됩니다 (현재 NHibernate이지만 구현 세부 사항 임).
이런 종류의 시나리오에 적합한 디자인이 무엇인지 궁금합니다.
순진 접근 것 같은 뭔가 :
public class ServiceImplementation : IService
{
// NHibernate session
private ISession session;
// service methods that use *session*
}
이 NHibernate에 특이 적으로 결합 및 초기화와 ORM 로직 코드를 소유를 관리하는 서비스 클래스를 강제한다.
내 질문은 특히 다음과 같습니다
- 가 어떻게 서비스가 DB/ORM 층에서 분리 된 분리 된 디자인을 달성 하는가?
- 및 은 db 액세스/ORM 계층을 초기화해야합니까? 서비스가 관리합니까?
이것은 일반적인 시나리오이므로 일부 "패턴"/ 모범 사례가 있다고 가정합니다.
온라인에서 사용할 수있는 대부분의 예제는이를 달성하는 방법 (DB 액세스 등을 위해 ORM을 사용하는 방법)을 보여 주지만 더 큰 규모의 설계 관점에서 올바르게 수행하는 방법을 설명하지는 않습니다. 여러으로, 이것은 메모리의 단일 인스턴스를 보유하는 서비스의 원인이됩니다
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple)]
: 한 번만 초기화 할 가정
이미 ContextMode를 single로 설정했습니다 (가장 이상적인 선택인지는 확실하지 않음).내 서비스에서 NHibernate의 클래스 인스턴스를 유지하는 것은 어떻게 분리 된 디자인을 얻는가? –
클래스를 생성하고 클래스에 모든 ORM 초기화 코드를 넣고 필요에 따라 쿼리하면 클래스가 분리됩니다. –