为什么在 Onion Architecture 中公开服务而不是存储库?
Why expose service instead of repository in 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;
}
您是否总是将 IUserService
等服务暴露给使用它的应用程序?但我注意到,IUserRepository
与 IUserService
?
具有相同的方法
如果你说基础设施问题,它是指还是涉及数据库?或者不一定?如果不是,基础设施问题的例子有哪些?
- 你有什么免费的 projects/github 项目推荐吗?我可以下载这些项目来学习或进一步研究洋葱架构?我在示例中理解得更好
P.S。
当我学习洋葱架构时,它总是(如果不是总是)至少提到 DDD。所以我想,我也会学习 DDD :)
1.存储库与服务:
您可能想阅读有关 difference between repositories and services, and/or Martin Fowlers service layer 定义的答案。简而言之,存储库处理数据持久性,而服务为业务逻辑提供面向客户端的 API。
在给定的小示例中,好处可能并不明显,但可以想象 UserService
有其他方法,例如 lockUser(User user)
或 joinGroup(User user, Group group)
。 UserService
然后使用 any IUserRepository
实现来实际持久化业务逻辑。
2。基础设施问题
基础设施层通常与外部 资源对话,例如文件系统、数据库或网络服务。在您的示例中,IUserRepository
是基础设施层的一部分。
3。例子
我知道的例子集(标有*)和一些我刚刚找到的例子:
- DDDSample*
- Sylius* (Actually a real application. Investigate the component 个文件夹。)
- CodeCampServer
- onionarchitecturemcv
我正在研究如何构建项目,所以我偶然发现了 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;
}
您是否总是将
IUserService
等服务暴露给使用它的应用程序?但我注意到,IUserRepository
与IUserService
? 具有相同的方法
如果你说基础设施问题,它是指还是涉及数据库?或者不一定?如果不是,基础设施问题的例子有哪些?
- 你有什么免费的 projects/github 项目推荐吗?我可以下载这些项目来学习或进一步研究洋葱架构?我在示例中理解得更好
P.S。 当我学习洋葱架构时,它总是(如果不是总是)至少提到 DDD。所以我想,我也会学习 DDD :)
1.存储库与服务:
您可能想阅读有关 difference between repositories and services, and/or Martin Fowlers service layer 定义的答案。简而言之,存储库处理数据持久性,而服务为业务逻辑提供面向客户端的 API。
在给定的小示例中,好处可能并不明显,但可以想象 UserService
有其他方法,例如 lockUser(User user)
或 joinGroup(User user, Group group)
。 UserService
然后使用 any IUserRepository
实现来实际持久化业务逻辑。
2。基础设施问题
基础设施层通常与外部 资源对话,例如文件系统、数据库或网络服务。在您的示例中,IUserRepository
是基础设施层的一部分。
3。例子
我知道的例子集(标有*)和一些我刚刚找到的例子:
- DDDSample*
- Sylius* (Actually a real application. Investigate the component 个文件夹。)
- CodeCampServer
- onionarchitecturemcv