微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.Net Core 三层架构中的工作单元和存储库模式

如何解决.Net Core 三层架构中的工作单元和存储库模式

我正在开发一个在 asp.net 核心中包含三层的项目。 第一个是企业逻辑,它作为一个单独的类库项目工作。 这里是实体和 Http 数据访问。作为这一层的要求,应该实现工作单元和存储库模式。我是通过以下方式做到的:

public class UnitOfWork : IUnitOfWork
    {
        private readonly DataContext _context;
        public UnitOfWork(DataContext context)
        {
            _context = context;
            Users = new UserRepository(_context);
        }
        public IUserRepository Users { get; private set; }
        public int Complete()
        {
            return _context.SaveChanges();
        }
        public void dispose()
        {
            _context.dispose();
        }
    }

为了提供业务逻辑并执行必要的验证,创建了另一个层 它引用了第一个类库。其实现如下:

public class UserProvider : IUserProvider
    {
        private readonly UnitOfWork _unitOfWork;
        private readonly IMapper _mapper;

        public UserProvider(IUnitOfWork unitOfWork,IMapper mapper)
        {
            _unitOfWork = unitOfWork as UnitOfWork;
            _mapper = mapper;
        }

        public void DeleteUser(int assetId)
        {
            _unitOfWork.Users.RemoveById(assetId);
            _unitOfWork.Complete();
        }

        public User GetUserById(int assetId)
        {
            var asset = _unitOfWork.Users.Get(assetId);
            _unitOfWork.Complete();
            return asset;
        }

        public User SaveUser(SaveUserDto saveUserDto)
        {
            User asset = _mapper.Map<User>(saveUserDto);
            var added = _unitOfWork.Users.Add(asset);
            _unitOfWork.Complete();
            return added;
        }

        public void UpdateUser(SaveUserDto asset)
        {
            User editableuser = _mapper.Map<User>(asset);
            _unitOfWork.Users.Edit(editableuser);
            _unitOfWork.Complete();   
        }

到这里为止,一切看起来都很好很清晰,而且似乎工作正常。现在在 Web API 项目的第三层中,我需要在 API 控制器中使用 UserProvider 来通过 API 执行 CRUD 操作。但是 UserProvider 在 UnitOfWork 中有一个依赖,作为干净架构的原则,层应该相互分离,我认为在第三层中引用第一层根本不是一个好主意。有什么办法可以解决,还是我理解错了?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。