나에게 저장소 패턴은 데이터 액세스 방법론에 대해 얇은 래퍼를 두는 것에 관한 것입니다. 귀하의 경우에 LINQ SQL하지만, NHibernate, 다른 사람 손으로 압연. 내가 뭘 찾았는지에 대한 테이블 당 저장소를 만드는 것은 매우 간단합니다 (bruno 목록과 이미 있습니다). 그것은 물건을 찾고 CRUD 작업을 수행하는 책임이 있습니다.
그러나 Johannes가 언급 한 것처럼 집계 된 루츠를 더 많이 처리하는 서비스 수준이 있습니다. getExistingUser (int id)와 같은 메서드를 사용하여 UserService를 갖게됩니다. 내부적으로 UserRepository.GetById() 메서드를 호출하여 사용자를 검색합니다. 비즈니스 프로세스에서 GetExistingUser()에 의해 반환 된 사용자 클래스가 거의 항상 User.IsInRoles() 속성을 채워야 할 필요가있는 경우 UserRepository 과 RoleRepository에 따라 UserService를 설정하면됩니다. 의사 코드에서는이 같은 것을 볼 수 있었다 :
public class UserRep : IUserRepository
{
public UserRep(string connectionStringName)
{
// user the conn when building your datacontext
}
public User GetById(int id)
{
var context = new DataContext(_conString);
// obviously typing this freeform but you get the idea...
var user = // linq stuff
return user;
}
public IQueryable<User> FindAll()
{
var context = // ... same pattern, delayed execution
}
}
가 개인적으로 나는이 내부적으로 범위 저장소 클래스를 만들 것 다음 userRep 및 roleRep는 SQL로 LINQ로 구성된다
public class UserService
{
public UserService(IUserRepository userRep, IRoleRepository roleRep) {...}
public User GetById(int id)
{
User user = _userService.GetById(id);
user.Roles = _roleService.FindByUser(id);
return user;
}
는 다음과 같이 비트 UserService 및 기타 XXXXXService 클래스를 공용으로 유지하여 서비스 API의 소비자를 정직하게 유지하십시오. 다시 말해서 저장소가 데이터 저장소와 대화하는 방식과 더 밀접하게 관련되어 있음을 알지만 서비스 계층은 비즈니스 프로세스의 요구 사항에 더욱 밀접하게 관련되어 있습니다.
나는 종종 실제로 필요한 것을 뱉어내는 서비스 방법을 구축하는 대신에 Linq가 Objects와 그 모든 것들에 대한 유연성을 과장하고 실제로 IQuerable 등을 사용하여을 사용하고있다.사용자 LINQ는 적절하지만 리포지토리를 모든 작업을 수행하려고 시도하지는 않습니다.
public IList<User> ActiveUsersInRole(Role role)
{
var users = _userRep.FindAll(); // IQueryable<User>() - delayed execution;
var activeUsersInRole = from users u where u.IsActive = true && u.Role.Contains(role);
// I can't remember any linq and i'm type pseudocode, but
// again the point is that the service is presenting a simple
// interface and delegating responsibility to
// the repository with it's simple methods.
return activeUsersInRole;
}
그래서 약간 번쩍였다. 내가 정말로 도움이되었는지 확신 할 수는 없지만, 확장 방법으로 너무 멋지게하는 것을 피하고 각 움직이는 부분을 매우 단순하게 유지하는 또 다른 레이어를 추가하는 것이 좋습니다. 나를 위해 일합니다.
자, 거기에 가세요. 매일 무언가를 배우십시오. 나 자신의 접근 방식을 조정해야합니다 :-) – Dylan
그래. 나는 또한이 대답으로 무언가를 배운다. 여러 저장소를 갖는 것이 논리적이지만 각 저장소가 집계 주위에 구축되어야한다는 것을 알지 못했습니다. 총체적인 의미를가집니다. –
우수 게시자입니다. –