Repository
클래스는 싱글 톤 동작을 가지며 _db
은 일회용 패턴을 구현합니다. 예외로 _db
개체는 첫 번째 호출 후에 처리되고 싱글 톤 동작으로 인해 _db
의 다른 호출이 중단됩니다.클래스 디자인 질문 (일회용 및 싱글 톤 동작)
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class Repository : IRepository
{
private readonly DataBase _db;
public Repository(DataBase db)
{
_db = db;
}
public int GetCount()
{
using(_db)
{
return _db.Menus.Count();
}
}
public Item GetItem(int id)
{
using(_db)
{
return _db.Menus.FirstOrDefault(x=>x.Id == id);
}
}
}
내 질문에 싱글 톤 동작을 제거하지 않고 제대로 작동하려면이 클래스를 디자인 할 방법이 있습니까? Repository
클래스는 많은 양의 요청을 처리합니다.
리포지토리 클래스는 하나의 역할을하므로 장기 실행 컨텍스트를 유지하는 것은 좋지 않습니다. 메모리 소비가 매우 빠르게 증가 할 수 있습니다. – user137348
오랜 시간 동안 컨텍스트를 유지하는 것은 나쁜 습관에 동의합니다. 이 경우 두 가지 옵션이 있습니다. 1. 리포지토리를 싱글 톤으로 사용하지 말고 각 요청에 대해 새 인스턴스를 반환하십시오. 메소드에 대한 각각의 호출에서'DataBase' 클래스를 전달하십시오. 옵션 1로 갈 것입니다. dispose 문제 옆에, 저장소 (repository)를 싱글 톤 (singleton)으로 반환 할 때'DataBase'가 thread-safe한지 확인해야합니다 (멀티 스레드 환경). – Steven
장기 실행 컨텍스트를 유지하는 것이 나쁜 관행이라면 왜 싱글 톤입니까? – Vitalik