为什么在Onion Architecture中公开服务而不是存储库?

男孩帕斯莫

我正在研究如何构建项目,因此偶然发现了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向使用它的应用程序公开服务但我注意到,IUserRepository有和相同的方法IUserService吗?

  2. 如果您说的是基础架构方面的问题,是意味着还是涉及数据库?还是不一定?如果没有,那么基础设施问题的例子有哪些?

  3. 您对免费项目/ github项目有什么建议,我可以下载这些建议以学习或进一步研究洋葱架构?我对例子更了解

PS在我学习洋葱体系结构时,它总是(即使不是总是)至少提到了DDD。所以我想我也将学习DDD :)

法比安·凯勒(Fabian Keller)

1.储存库与服务:

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

在给定的小示例中,好处可能并不明显,但是可以想象UserService有其他方法,例如lockUser(User user)joinGroup(User user, Group group)UserService随后使用任何 IUserRepository实现真正持久的业务逻辑。

2.基础设施问题

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

3.例子

我知道的示例集合(带有*标记)以及我刚刚发现的一些示例:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么virtualbox软件包是contrib而不是在主Debian存储库中?

来自分类Dev

为什么我需要在 18.04 中启用 `universe` 存储库 - 它不是默认启用的吗?

来自分类Dev

为什么可以在WCF服务中公开公开私有方法?

来自分类Dev

为什么X2Go服务器不在主Ubuntu存储库中?

来自分类Dev

为什么要宣布成员公开而不是公开?

来自分类Dev

laravel存储库-为什么需要调用接口而不是直接调用存储库文件?

来自分类Dev

为什么克隆存储库中的“ git status”相对于源远程而不是我创建的存储库中检查当前分支

来自分类Dev

.net 4.5中的ReadOnlyDictionary如何不公开.Add方法?(不是为什么)

来自分类Dev

为什么总是GATT服务器公开服务?

来自分类Dev

为什么AuditReader无法在存储库中自动连线

来自分类Dev

为什么某些软件不在官方Ubuntu存储库中?

来自分类Dev

为什么在存储库中找不到gnomad2?

来自分类Dev

为什么 Timeshift 不在官方 Ubuntu 存储库中?

来自分类Dev

为什么 Amarok 从 19.04 存储库中删除?

来自分类Dev

为什么我必须在客户端库中公开宏实现的“使用”?

来自分类Dev

为什么数据库在服务中不调用onCreate?

来自分类Dev

为什么我的IP地址是公开的而不是私有的?

来自分类Dev

为什么Android Gradle无法找到junit?为什么不在远程存储库中搜索呢?

来自分类Dev

为什么有状态的bean无法公开为Web服务?

来自分类Dev

为什么我不能访问Windows上从Minikube公开的服务?

来自分类Dev

为什么有状态的bean无法公开为Web服务?

来自分类Dev

为什么需要Primefaces Maven存储库?

来自分类Dev

为什么内核存储库的标签不同

来自分类Dev

为什么我不能在OS X Safari上播放onion.com视频?

来自分类Dev

为什么不是'|' 被超载?

来自分类Dev

为什么来自远程计算机的git clone说它不是git存储库?

来自分类Dev

为什么来自远程计算机的git clone说它不是git存储库?

来自分类Dev

为什么我们在JPA存储库中使用服务层和DAO

来自分类Dev

为什么Spyder使用基本环境中的库而不是虚拟环境中的库

Related 相关文章

  1. 1

    为什么virtualbox软件包是contrib而不是在主Debian存储库中?

  2. 2

    为什么我需要在 18.04 中启用 `universe` 存储库 - 它不是默认启用的吗?

  3. 3

    为什么可以在WCF服务中公开公开私有方法?

  4. 4

    为什么X2Go服务器不在主Ubuntu存储库中?

  5. 5

    为什么要宣布成员公开而不是公开?

  6. 6

    laravel存储库-为什么需要调用接口而不是直接调用存储库文件?

  7. 7

    为什么克隆存储库中的“ git status”相对于源远程而不是我创建的存储库中检查当前分支

  8. 8

    .net 4.5中的ReadOnlyDictionary如何不公开.Add方法?(不是为什么)

  9. 9

    为什么总是GATT服务器公开服务?

  10. 10

    为什么AuditReader无法在存储库中自动连线

  11. 11

    为什么某些软件不在官方Ubuntu存储库中?

  12. 12

    为什么在存储库中找不到gnomad2?

  13. 13

    为什么 Timeshift 不在官方 Ubuntu 存储库中?

  14. 14

    为什么 Amarok 从 19.04 存储库中删除?

  15. 15

    为什么我必须在客户端库中公开宏实现的“使用”?

  16. 16

    为什么数据库在服务中不调用onCreate?

  17. 17

    为什么我的IP地址是公开的而不是私有的?

  18. 18

    为什么Android Gradle无法找到junit?为什么不在远程存储库中搜索呢?

  19. 19

    为什么有状态的bean无法公开为Web服务?

  20. 20

    为什么我不能访问Windows上从Minikube公开的服务?

  21. 21

    为什么有状态的bean无法公开为Web服务?

  22. 22

    为什么需要Primefaces Maven存储库?

  23. 23

    为什么内核存储库的标签不同

  24. 24

    为什么我不能在OS X Safari上播放onion.com视频?

  25. 25

    为什么不是'|' 被超载?

  26. 26

    为什么来自远程计算机的git clone说它不是git存储库?

  27. 27

    为什么来自远程计算机的git clone说它不是git存储库?

  28. 28

    为什么我们在JPA存储库中使用服务层和DAO

  29. 29

    为什么Spyder使用基本环境中的库而不是虚拟环境中的库

热门标签

归档