result = Orders::Create.new.call(params)
                  
                  
                  …
                  
                  
                  
                  
                  
                  структура папок:
                  
                  
                  service_objects (любое имя)
                  
                  
                    orders
                  
                  
                      validators 
                  
                  
                        create.rb
                  
                  
                      create.rb
                  
                  
                  
                  
                  
                  в Orders::Create:
                  
                  
                  
                  
                  
                  def call(params)
                  
                  
                    validated_params = yield validate_params(params)
                  
                  
                    …
                  
                  
                  end
                  
                  
                  
                  
                  
                  private 
                  
                  
                  
                  
                  
                  def validate_params(params)
                  
                  
                    validaton.= Validators::Create.new.call(params)
                  
                  
                    validation.success? ? Success(validation.to_h) : Failure(errors: validation.errors.to_h)
                  
                  
                  end
                  
                  
                  
                  
                  
                  —
                  
                  
                  
                  
                  
                  то есть валидатор в отдельном файле в специальной папке рядом с сервис объектом, а его фейл завершает сервис объект
                  
                  
                  
                  
                  
                  конкретно этот пример с драй, но можно и без него
                  
                  
                  
                  
                  
                  надеюсь понятно накидал 🙂
                  
                  
                  
                  
                  
                  —
                  
                  
                  
                  
                  
                  можно даже в контроллере вызывать валидацию, поинт в ее отдельности. чтобы вызывать чисто класс и получать ответ
                  
                  
                
Да, как обычно: контроллер-интерактор-контракт(и трансформер)-репрезентер. Ещё сюда же репу/кьюери. Вроде бы покрывает все, что нужно.
Слишком мало паттернов - не пройдешь собес
добавим драй стракты, монады, будем использовать репозитори паттерн до состояния что бизнес логика потеряется в абстракциях
Валидатор в папочке рядом с интерактором это не rails way ни разу )
 Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  вообще похую рэилс вэй или не рэилс оно должно быть удобно рэилс вэй это валидации в моделях
Структура папок в рельсвэй это одноуровневая структура Отдельно /app/forms, отдельно /app/validators и так далее. А понамешивать все вместе рядом в папочки это мешанина и мешает переиспользовать
 Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  валидатор существует для конкретного сервис объекта, его и не нужно переиспользовать но если очень хочется, то можешь
> валидатор существует для конкретного сервис объекта Валидатор существует для конкретного бизнес кейса. Высокая связность знаешь что такое?
 Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  мешанина это валидатор и логика в одном файле моя цель этого не допускать
Вот здесь мы пускаем данные по такому формату, а вот здесь например сокращенный. Причем это может в нескольких сервисах использоваться
 Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  для конкретного сервис объекта и скорее всего даже для конкретного эндпоинта)
Мешанина это когда ты пытаешься каждый сервис объект гемом сделать
Для конкретного бизнес кейса оно существует
 Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Nikolay
                          Paraskiva
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  каким гемом?) астанавись
Когда ты сервис вместе со всеми завистмостями херачишь в одну папочку рядом. Мусор
Обсуждают сегодня