저는 데이터 액세스를 위해 저장소를 사용하고 있지만 작업 단위 패턴과 비슷한 것을 전혀 구현하지 못했습니다. 저는 RavenDB와 ASP.NET MVC (이론상 사소한 세부 사항)를 사용하여 자체 교육을위한 새로운 프로젝트를 시작했으며 비즈니스 트랜잭션 (이 아닌 웹 요청)을 자체적으로 랩 할 수있는 좋은 방법을 찾고 있습니다. 작업 단위는 있지만 작업을 수행하는 데 약간의 어려움이 있습니다. 나는 '작업 단위의 데이터 컨텍스트를 리포지토리에 전달
public interface IUnitOfWork : IDisposable
{
void Commit();
}
public class UnitOfWork : IUnitOfWork
{
private readonly IDocumentSession _session;
public UnitOfWork(IDocumentStore documentStore)
{
_session = documentStore.OpenSession("http://from:config");
}
public void Commit()
{
_session.SaveChanges();
}
public static IUnitOfWork Begin()
{
return IoC.GetInstance<IUnitOfWork>();
}
public void Dispose()
{
_session.Dispose();
}
}
:
이public class UserService : IUserService
{
private readonly IRepository<User> _userRepository;
private readonly IRepository<Role> _roleRepository;
public UserService(
IRepository<User> userRepository,
IRepository<Role> roleRepository)
{
_userRepository = userRepository;
_roleRepository = roleRepository;
}
public void Register(User user)
{
using (var session = UnitOfWork.Begin())
{
_userRepository.Create(user);
_roleRepository.AddToRole(user, Role.Public);
session.Commit();
}
}
}
작업 인터페이스의 단위에서 나의 첫번째 찌르기는 다음과 같은 :
다음 코드는 내가 볼 같은 을 거라고 것입니다 stuck은 데이터베이스 세션에 대한 리포지토리의 액세스입니다. 앞서 언급 한대로 비즈니스 거래을 자체 단위로 포장하고 싶습니다. 나는 또한 세션/컨텍스트를 각 메소드에 전달하는 것에 열중하지 않으며, 내가 본 대부분의 다른 솔루션은 웹 세션과 같은 방식으로 정적 메소드 및/또는 저장소를 사용합니다. 이들 모두는 나를 조금 불편하게 만듭니다. 이 전체적인 Unit of Work 개념에 빠져있는 중요한 열쇠가 있습니까?
두 가지 추가 옵션이 있습니다. 1. 비즈니스 트랜잭션 관리로 .Net Distributed Transaction (TransactionScope)을 사용합니다. 기술에 제한이 없으며 세션이나 컨텍스트 정보를 전달할 필요가 없습니다. 2. Commit 메서드에서 변경, 추가, 제거, 수정 한 모든 변경 내용을 추적하고 이러한 모든 변경 사항을 조정하는 사용자 지정 UnitOfWork 구현을 디자인합니다. –