그래서 저는 리포지토리 모델에 대해 배웠습니다. 리포지토리가 많은 복잡한 논리를 수행하지 않을 것으로 예상됩니다. 그러나 나는 또한 비즈니스 로직의 대부분이 내 Controllers
안에 있으면 안된다는 것을 읽었다. 그래서 어디에 넣을까요?리포지토리 및 서비스, MVC 모델
일부 샘플 응용 프로그램을 살펴본 결과 Services
이라는 또 다른 복잡한 로직을 사용하는 레이어가있는 것으로 보입니다. 그렇다면이 요소는 MVC 패턴에 어떤 영향을 줍니까?
내 리포지토리에 액세스하기 위해 서비스를 구축 한 다음 내 컨트롤러가 서비스에 액세스하기를 원합니까? 이렇게?
interface IMembershipService
{
bool ValidateUser(string username, string password);
MembershipCreateStatus Create(string username, string password);
}
interface IMembershipRepository
{
MembershipCreateStatus Create(string username, string password);
}
class MembershipRepository : IMembershipRepository
{
public MembershipRepository(ISession session)
{
**// this is where I am confused...**
}
}
class MembershipService : IMembershipService
{
private readonly IMembershipRepository membershipRepository;
public MembershipService(IMembershipRepository membershipRepository)
{
this.membershipRepository = membershipRepository;
}
public bool ValidateUser(string username, string password)
{
// validation logic
}
public MembershipCreateStatus Create(string username, string password)
{
return membershipRepository.Create(username, password);
}
}
class MembershipController : Controller
{
private readonly IMembershipService membershipService;
public MembershipController(IMembershipService membershipService)
{
this.membershipService = membershipService
}
}
내 코드의 표시된 부분은 나를 혼란스럽게합니다. 내가 읽은 모든 것은 내 ISession
을 내 저장소에 주입해야한다고 말했습니다. 즉, 내 서비스에 ISession
을 주입 할 수 없다는 것을 의미하므로 내 서비스에서 데이터베이스 액세스를 어떻게 수행합니까? 프로세스가 여기에 해당하는지 이해가되지 않습니다.
ValidateUser
을 내 IMembershipRepository
에 넣었을 때 '나쁘다'고 들었습니다. 그러나 IMembershipRepository
은 데이터베이스 액세스가있는 곳입니다. 그게 의도 야, 그렇지? 데이터베이스 액세스를 최소화하려면? 하지만 다른 논리를 넣을 수 없다면 요점은 무엇입니까?
누군가가이 문제에 대해 조명하고 더 실용적 일 수있는 예를 보여줄 수 있습니까?
나는 Fluent nHibernate
, ASP.NET MVC 3.0
및 Castle.Windsor
을 사용하고 있습니다.
class MembershipService
{
private readonly IMembershipRepository membershipRepository;
public MembershipService(ISession session)
{
membershipRepository = new MembershipRepository(session);
}
}
그리고 결코 내 컨트롤러보다는 Repositories
에 직접 액세스 권한을 부여 ... 그런 짓을해야 하는가?
그래서 ..내 'Service'에'Session'을 삽입하고 서비스 내에 새로이 인스턴스화 된'Repository' 객체로 전달해야합니까? 나는 이것이 IoC와 어떻게 관련이 있는지에 관해서는 잃어버린 것 같다. 나는 당신이 볼 수 있고, 내가 더 잘 이해하는지 나에게 말할 수 있다면, 나의 지위의 바닥에 약간을 더했다. – Ciel
@Stacey, 아니요, 당신은 서비스에'Session '을 삽입하지 않습니다. 저장소에 서비스를 주입합니다. 그리고 당신은'ISession'을 저장소에 삽입합니다. 그래서 컨트롤러를 생성하기 위해서는 서비스가 필요하고, 서비스를 만들기 위해서는 저장소가 필요하고 저장소를 만들기 위해서는'Session '이 필요합니다. 이 배관 작업은 사용중인 DI 프레임 워크에 의해 수행됩니다. –
첨부 된 예제가 잘못 되었다면 더 정확한 예제를 보여줄 수 있습니까? _dependency Injection_이 나를 위해이 일을해야한다고 생각했기 때문에 실제로'new' 키워드로 인스턴스를 초기화해야한다면 내 저장소를 인스턴스화하는 방법을 이해하지 못합니다. – Ciel