A camada de lógica: Dry-RB
O curso avalia duas bibliotecas Dry-rb diante dos service objects de uma aplicação Rails real. Parte dos objetos Result feitos com Data.define e um booleano success, que a maioria dos services já usa, e aponta seus custos, como um helper de falha de oito campos que inventa valores vazios. Depois cobre Success e Failure do dry-monads, fmap e bind, notação Do e contratos do dry-validation com schemas e rules. Mostra como ligar um contrato a um service e termina avaliando, service por service, se a adoção vale a pena.
O que você vai aprender
- ✓Como Success e Failure trocam um booleano success por dois tipos distintos
- ✓Quando usar fmap e quando usar bind para encadear passos que podem falhar
- ✓Como a notação Do mantém plano um service de vários passos e para no primeiro Failure
- ✓Como escrever contratos do dry-validation com schemas params e rules
- ✓Como carregar a extensão de monads para que to_monad ligue um contrato a um service
- ✓Como avaliar, service por service, se uma gem remove um custo que o código já tem
O objeto Result que esta aplicação já tem
Em setembro de 2026, app/services nesta aplicação tinha 65 arquivos Ruby. Quarenta e nove deles declaram um tipo de resultado com uma linha no formato desta, copiada de app/services/auth/authenticate_user_service.rb:
Ler a aula completa grátis →Currículo
7 aulasO objeto Result que esta aplicação já tem
Examina os objetos Result feitos com Data.define nesta aplicação e o enchimento e os campos success mortos que carregam.
Success e Failure como valores
Troca o booleano success pelas classes Success e Failure e mostra como value! falha com barulho num Failure.
fmap e bind: compor sem if
Explica fmap para funções que não podem falhar e bind para funções que devolvem o próprio Result.
Notação Do: o service object plano
Usa a notação Do para que yield desembrulhe cada Success e saia do método no primeiro Failure.
Contratos: schema e rules
Monta contratos do dry-validation com schemas params e rules, incluindo a rule pulada quando o schema falha.
Ligando um contrato a um service
Carrega a extensão de monads para que to_monad transforme o resultado de um contrato no primeiro yield de um service.
Esta aplicação deveria adotar Dry-RB?
Avalia a adoção service por service e conclui que o enchimento do CompleteLessonService pode ser resolvido sem gem.