为什么在Onion架构中公开服务而不是存储库
本文关键字:服务 存储 Onion 为什么 | 更新日期: 2024-10-22 13:32:58
我正在深入研究如何构建项目,因此偶然发现了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
有相同的方法?如果您说"基础设施问题",是指数据库还是涉及数据库?或者不一定?如果没有,基础设施问题的例子有哪些?
- 你对免费项目/github项目有什么建议吗?我可以下载这些项目来学习或进一步研究洋葱架构?我对例子理解得更好
p.S。当我学习洋葱架构时,它总是,如果不是总是,至少它提到了DDD。所以我想,我也会学习DDD:)
1。存储库与服务:
您可能想阅读关于存储库和服务之间区别的答案,和/或Martin Fowlers服务层定义。简言之,存储库处理数据持久性,而服务为业务逻辑提供面向客户端的API。
在给定的小例子中,好处可能不清楚,但想象一下UserService
有其他方法,如lockUser(User user)
或joinGroup(User user, Group group)
。UserService
然后使用任何IUserRepository
实现来实际持久化业务逻辑。
2.基础设施问题
基础设施层通常与外部资源进行对话,如文件系统、数据库或web服务。在您的示例中,IUserRepository
是基础结构层的一部分。
3.示例
我知道的一组例子(用*标记)和我刚刚发现的一些例子:
- DD样品*
- Sylius*(实际上是一个真正的应用程序。调查组件文件夹。)
- CodeCamp服务器
- onionarchitecturemcv