我正在深入研究如何构建项目,因此我偶然发现了Onion Architecture。据我了解,它更多的是以域为中心的焦点架构,而不是数据库驱动的类型。
我正在寻找一些github项目来学习和了解有关架构的更多信息,所以我找到了这个https://github.com/chetanvihite/OnionArchitecture.Sample
我很难理解:
asterisk
他如何使用它是通过构造函数注入。
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
具有相同的方法?
如果您说基础设施问题,是表示还是涉及数据库?或者不一定?如果没有,基础设施问题的例子是什么?
P.S。 当我学习洋葱建筑时,它总是,如果不是总是,至少它提到DDD。所以我想,我也会学习DDD :)。
答案 0 :(得分:8)
<强> 1。存储库与服务:
您可能希望阅读difference between repositories and services和/或Martin Fowlers service layer定义的答案。简而言之,存储库处理数据持久性,而服务为业务逻辑提供面向客户端的API。
在给定的小例子中,好处可能不明确,但想象UserService
有其他方法,例如lockUser(User user)
或joinGroup(User user, Group group)
。 UserService
然后使用任何 IUserRepository
实现来实际保留业务逻辑。
<强> 2。基础设施问题
基础架构层通常与外部资源进行通信,例如文件系统,数据库或Web服务。在您的示例中,IUserRepository
是基础架构层的一部分。
第3。实例强>
我知道的一些例子(用*标记)和我刚刚找到的一些例子: