【发布时间】:2021-11-18 14:56:37
【问题描述】:
在我的洋葱架构中,我的 PresentationLayer 包含一个名为 LogRabbitMQFilters 的类,该类具有用于过滤搜索的不同属性。
我通过映射器在 ApplicationLayer 中传递 LogRabbitMQFilters :
public RabbitMQController(IELKService iELKService, IMapper mapper)
{
_iELKService = iELKService;
_mapper = mapper;
}
public async Task<IActionResult> Index(int? id, LogRabbitMQFilters filters)
{
var filtersMapped = _mapper.Map<LogRabbitMQFilters>(filters);
var response = await _iELKService.GetLog(filtersMapped);
/*some code.....*/
}
在 ApplicationLayer 中,我将 logRabbitMQFilters 映射到在 Persistance 层中声明的 RabbitMQFilters,然后像这样调用我的存储库:
public ELKService(IELKRepository iELKRepository, IMapper mapper)
{
_iELKRepository = iELKRepository;
_mapper = mapper;
}
public async Task<LogResult> GetLog(LogRabbitMQFilters logRabbitMQFilters)
{
var filterMapped = _mapper.Map<RabbitMQFilters>(logRabbitMQFilters);
return await _iELKRepository.GetLogs(filterMapped);
}
这是最好的方法吗?还有另一种方法可以将我的过滤器类传递给存储库吗?我想到了规范模式,但如果它是一个好的解决方案,我现在没有。
【问题讨论】:
-
我认为您的
architecture似乎还不错。实践是Controller,它将实现Service Layer Interface,然后Service Layer将调用Repository,它将具有Database Read-Write操作或任何其他操作。所以你的设计应该是1. LogRabbitMQFilterController,2. ILogRabbitMQFilterService,3. LogRabbitMQFilterService4. ILogRabbitMQFilterRepository,5. LogRabbitMQFilterRepository -
@MdFaridUddinKiron 所以你想为过滤器添加另一个控制器,否则我不理解你的答案:)
-
可能是我没有解释清楚,我不确定我在哪里添加了两个控制器?一个
Controller、一个IService和IRepository就是这样。 -
你可以have a look code sample here 摆脱进一步的困惑
-
你说得对,这是我的错...谢谢:)
标签: asp.net-core repository domain-driven-design specification-pattern