помимо ICommand и ICommandHandler создаётся ещё некий ICommandProcessor, который и инджектится через DI в контроллеры и пр. Внутри него есть некий резолвер, который содержит в себе все хендлеры для каждой команды, то есть этакий IServiceProvider. Реализация его единственного метода HandleAsync у меня получилась примерно такая:
                  
                  
                  Task ProcessAsync<TCommand>(TCommand command) {
                  
                  
                       var handler = _serviceProvider.GetService(typeof(ICommandHandler<TCommand>));
                  
                  
                       if (handler is null) throw...
                  
                  
                       return await handler.HandleAsync();
                  
                  
                  }
                  
                  
                  
                  
                  
                  И вот вопрос: в чём выигрыш относительно обычного репозитория? В случае репозитория у меня есть единственный интерфейс, с которым всё понятно. Здесь же для одного запроса мне приходится использовать три класса (DTO, Handler, Processor), причём не факт, что в рантайме мой ICommandProcessor не свалится с эксепшином из-за ненайденного хендлера.
                  
                  
                  
                  
                  
                  Я вижу только плюс в том, что я избавился от потенциального god object'a. Или я чего-то не понимаю?
                  
                  
                
 Михаил Макарычев
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Михаил Макарычев
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Апну свой ночной вопрос
Обсуждают сегодня