【问题标题】:Why expose service instead of repository in Onion Architecture?为什么在洋葱架构中公开服务而不是存储库?
【发布时间】:2016-08-12 01:44:13
【问题描述】:

我正在研究如何构建项目,因此我偶然发现了 Onion Architecture。据我了解,它更像是一种以领域为中心的架构,而不是数据库驱动的类型。

我正在寻找一些github项目来学习和了解更多关于架构的信息,所以我找到了这个https://github.com/chetanvihite/OnionArchitecture.Sample

我很难理解:

namespace Domain.Interfaces
{
    public interface IUserRepository
    {
        IEnumerable<User> GetUsers();
    }
}

namespace Services.Interfaces
{
    public interface IUserService
    {
        IEnumerable<User> GetUsers();
    }
}

namespace Services
{
    public class UserService : IUserService
    {
        private readonly IUserRepository _repository;

        public UserService(IUserRepository repository)
        {
            _repository = repository;
        }

        public IEnumerable<User> GetUsers()
        {
            return _repository.GetUsers();
        }
    }
}

他如何使用它是通过构造函数注入。

private readonly IUserService _service;

public HomeController(IUserService service)
{
  _service = service;
}
  1. 您是否总是将IUserService 之类的服务公开给使用它的应用程序?但我注意到,IUserRepositoryIUserService 有相同的方法?

  2. 如果您说基础架构问题,是指还是涉及数据库?或者不一定?如果不是,有哪些基础设施问题的例子?

  3. 您对免费项目/github 项目有什么建议吗?我可以下载这些项目以进一步了解或研究 onion 架构?我更了解示例

附: 当我学习洋葱架构时,它总是,如果不是总是,至少它提到了 DDD。所以我想,我也会学习 DDD :)

【问题讨论】:

标签: c# domain-driven-design onion-architecture


【解决方案1】:

1.存储库与服务:

您可能想阅读有关difference between repositories and services 和/或Martin Fowlers service layer 定义的答案。简而言之,存储库处理数据持久性,而服务为业务逻辑提供面向客户端的 API。

在给定的小例子中,好处可能并不明显,但想象一下UserService 有额外的方法,例如lockUser(User user)joinGroup(User user, Group group)UserService 然后使用 any IUserRepository 实现来实际持久化业务逻辑。

2。基础设施问题

基础设施层通常与外部资源对话,例如文件系统、数据库或网络服务。在您的示例中,IUserRepository 是基础架构层的一部分。

3.示例

我知道的一些例子(用*标记)和我刚刚找到的一些例子:

【讨论】:

  • 非常感谢您的参考。真的很感激,但在 1. 这并不意味着我必须在存储库中创建相同的方法,例如 lockUser 和 joinGroup,对吧?
  • 是的,假设 IUserRepository 为用户对象提供了简单的 CRUD 方法。 UserService.lockUser(userToLock) 方法然后更改用户对象的状态(例如通过userToLock.lock()),然后使用存储库(例如通过_repository.save(userToLock))将其持久化。无论对 UserService 的实际持久性实现如何,封装都可以轻松添加横切关注点,例如访问控制、事件触发、日志记录……
猜你喜欢
  • 2012-09-01
  • 2012-05-13
  • 2019-01-13
  • 2023-04-02
  • 2013-06-30
  • 2011-03-24
  • 2013-08-12
  • 2021-08-29
  • 2011-10-09
相关资源
最近更新 更多