gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:30:14 26 4
gpt4 key购买 nike

我正在研究如何构建项目,所以我偶然发现了 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();
}
}
}

他的使用方式是通过构造函数注入(inject)。

private readonly IUserService _service;

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

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

  3. 您对我可以下载以学习或进一步研究洋葱架构的免费项目/github 项目有什么建议吗?我在示例中理解得更好

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

最佳答案

<强>1。存储库与服务:

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

在给定的小示例中,好处可能并不明显,但可以想象 UserService 有额外的方法,例如 lockUser(User user)joinGroup(User用户,组组)UserService 然后使用任何 IUserRepository 实现来实际保留业务逻辑。

<强>2。基础设施问题

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

<强>3。示例

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

关于c# - 为什么在 Onion Architecture 中公开服务而不是存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36725852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com