Boy*_*smo 5 c# domain-driven-design 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
他如何使用它是通过构造函数注入.
private readonly IUserService _service;
public HomeController(IUserService service)
{
_service = service;
}
Run Code Online (Sandbox Code Playgroud)
您是否总是将服务暴露给IUserService消费它的应用程序?但我注意到,IUserRepository有相同的方法IUserService吗?
如果您说基础设施问题,它是否意味着或涉及数据库?或者不一定?如果没有,基础设施问题的例子是什么?
PS正如我正在学习洋葱建筑,它总是,如果不是总是,至少它提到DDD.所以我想,我也将学习DDD :)
1.存储库与服务:
您可能希望阅读有关存储库和服务与/或Martin Fowlers服务层定义之间差异的答案.简而言之,存储库处理数据持久性,而服务为业务逻辑提供面向客户端的API.
在给定的小例子中,好处可能并不清楚,但想象UserService有其他方法,如lockUser(User user)或joinGroup(User user, Group group).在UserService随后使用任何 IUserRepository实现真正持久的业务逻辑.
2.基础设施问题
基础结构层通常与外部资源(例如文件系统,数据库或Web服务)进行通信.在您的示例中,它IUserRepository是基础结构层的一部分.
3.例子
我知道的一些例子(用*标记)和我刚刚找到的一些例子: