Пікірлер
@reidecarvalho
@reidecarvalho 9 күн бұрын
Como fazer testes desacoplados da implementação? Isso soa quase que impossível. Vou dar um exemplo. A classe CadastrarClienteUseCase tem uma dependência em seu construtor de uma interface para um serviço externo que busca o CEP, pode dar o nome que quiser (EnderecoClient, EnderecoProvider, EnderecoService, etc.). Essa interface de Endereco tem 5 métodos, mas o UseCase chama só um, buscarEnderecoPorCep, por exemplo. Se eu fizer o teste do UseCase, serei obrigado a conhecer detalhes da implementação, isto é, que ele depende do serviço de Endereco e especificamente desse método, para funcionar. Se no futuro o UseCase quiser obter o endereço de um outro método, mesmo que seja na mesma interface do serviço de Endereço, vai quebrar o teste, pois o "expect" estava programado para o outro método. Isso faz com que mudança nos detalhes da implementação me faça quebrar o teste, mesmo que o resultado seja o mesmo. Eu não sei como solucionar esse dilema.
@ricardonogueira8980
@ricardonogueira8980 15 күн бұрын
Muito bom❤
@freeman788
@freeman788 21 күн бұрын
Rust tbm
@fabiosousadesantana3861
@fabiosousadesantana3861 22 күн бұрын
Top esse vídeo
@DougCoder
@DougCoder 23 күн бұрын
Sensacional! Obrigado por facilitar o entendimento ou revisão de conteúdos, Otavio!
@leandromartins6935
@leandromartins6935 Ай бұрын
Gostei da abordagem mas acho que o codigo acaba adotando um over engeneering... em alguns casos menos é mais
@eusouoviana
@eusouoviana Ай бұрын
Util, obrigado por compartilhar o conteudo conosco.
@kattkins8697
@kattkins8697 Ай бұрын
Parabens, você foi o único cara nas minhas pesquisas que não só explica o conceito, como também as dúvidas que ele pode gerar.
@mariofernandes56
@mariofernandes56 Ай бұрын
Bem esclarecedor. Parabens.
@ColyanaMagalhães
@ColyanaMagalhães Ай бұрын
Eu acho esse tema de testes muito chato, mas sou estudante e to fazendo um trabalho sobre e seus videos são os melhores do assunto, muito didáticos e esclarecedores! Segui aqui e pretendo maratonar seu canal, parabéns :)
@otaviolemos
@otaviolemos Ай бұрын
@@ColyanaMagalhães obrigado! TMJ!
@kauanmocelin
@kauanmocelin Ай бұрын
Me corrija se estiver errado, mas me parece que a notificação de eventos é simplesmente a implementação do padrão de projeto "Observer", é isso? Nesse caso seria um "Observer" genérico, sem tipos.
@otaviolemos
@otaviolemos Ай бұрын
@@kauanmocelin é parecido mas não exatamente o mesmo. No pubsub não há dependência entre os publicadores e os consumidores (nenhum conhece o outro), mas ambos conhecem o broker. No observer o subject mantém uma lista dos seus observadores para mantê-los informados. Veja só: www.linkedin.com/pulse/observer-vs-pub-sub-pattern-ahmed-shamim-hassan-s0yrc?
@kauanmocelin
@kauanmocelin 2 ай бұрын
8:21 "e não é uma coisa difícil", isso que não consigo entender porque tem gente que demoniza arquiteturas concêntricas, qual a dificuldade de inverter as dependências? Na minha visão, quem é contra este tipo de arquitetura não tem conhecimentos mínimos de base, o ganho que você tem em comparação com o esforço é absolutamente justificável. Tenho exatamente a mesma visão que você Otavio, muito bom!
@macaconerd2121
@macaconerd2121 2 ай бұрын
Bom vídeo
@rafaelramosnunes583
@rafaelramosnunes583 2 ай бұрын
Uma dúvida, eu preciso de logs para monitorar toda aplicação, onde eu colocaria e como seria?
@williammenezes416
@williammenezes416 2 ай бұрын
Cópia fiel do livro clean architecture do tio Bob em vídeo 👍
@gabrieloliveiranet
@gabrieloliveiranet 2 ай бұрын
Either não seria over engineering? Na minha percepção o código parece mais lento, mas na prática ele não está substituindo o try catch?
@barrajr5369
@barrajr5369 2 ай бұрын
Sempre que temos campos para validar, precisamos colocar esses campos no value object, por exemplo campo “password” devemos colocar no value object?
@andreyagra
@andreyagra 2 ай бұрын
Professor, uma curiosidade: pq clojure e não elixir?
@manricklazaro4112
@manricklazaro4112 2 ай бұрын
tenho uma duvida, sou novo na programação. Tô lidando com uma situação no frontend, em que estamos implementando alguns testes de integração lá. Uma das coisas que vem levantado um debater interno, é que existe um teste que verifica se o front ta enviando na rota os filtros da página. isso é teste de integração? é necessário fazer esse tipo de teste?
@reidecarvalho
@reidecarvalho 3 ай бұрын
Esse russo abriu minha mente para muitos conceitos! Essa dica guardarei pra sempre. A mais valiosa e a que mais me impactou diretamente na minha forma de pensar.
@papaleguaselvagem
@papaleguaselvagem 3 ай бұрын
Seria bom coloca os termo no vídeo de acordo que vai falando estilo os vídeos do código fonte. Obrigado pelos vídeos
@Hiiiiii_Guys
@Hiiiiii_Guys 3 ай бұрын
Professor Otavio Lemos, o Sr. já fez um vídeo sobre arquiteturas evolutivas que vai substituir a Arquitetura Limpa ? (tema: Arquitetura evolutivas e modulares) referente: kzbin.info/www/bejne/aHrYgKytaqeZebMsi=8RkJGPv2J3gMcLB0
@pwcodigo
@pwcodigo 3 ай бұрын
Tipo tarefa criada no jira a pessoa adiciona todos os detalhes.
@pwcodigo
@pwcodigo 3 ай бұрын
Obg pelo conteúdo.
@MarcsonSantos102
@MarcsonSantos102 3 ай бұрын
Muito esclarecedor, obrigado pelas informações.
@GabrielSouza-gi2jb
@GabrielSouza-gi2jb 3 ай бұрын
Boa tarde Professor, achei massa esse quadro do clean architecture na parede, poderia responder onde comprou ou foi personalizado.
@otaviolemos
@otaviolemos 3 ай бұрын
@@GabrielSouza-gi2jb opa! É só ir em www.theWiseDev.com.br e entrar com seu e-mail!
@GabrielSouza-gi2jb
@GabrielSouza-gi2jb 3 ай бұрын
Parabéns pelo conteúdo Otavio👏🏻👏🏻 Melhorando a compreensão de clean architecture e suas aplicações. Gostei deste quadro sobre clean architecture na parede do fundo, poderia indicar onde adquiriu?
@AnndreJunior
@AnndreJunior 4 ай бұрын
Nesse contexto de usuário, o email informado deve ser validado na entidade, mas e a verificação se o email já não é usado - que envolve bater no banco e ver isso, deve ser feito na entidade ou no caso de uso? Outra dúvida, se eu quiser poupar tempo usando uma lib de validação, posso usar direto na entidade ou esse tipo de sacrifício não é válido?
@otaviolemos
@otaviolemos 4 ай бұрын
@@AnndreJunior a checagem de existência do e-mail eu faria no caso de uso porque envolve o repositório. Ultimamente eu tenho feito a validação dos dados na entrada da aplicação, assim não preciso verificar na entidade e, para isso, uso uma lib.
@AnndreJunior
@AnndreJunior 4 ай бұрын
@@otaviolemos então posso fazer isso no dto de requisição sem medo de ser feliz
@otaviolemos
@otaviolemos 3 ай бұрын
@@AnndreJunior sim! Segundo o Uncle Bob quanto mais “sintática” a validação, mais perto da entrada ela pode ficar.
@AnndreJunior
@AnndreJunior 3 ай бұрын
@@otaviolemos bom saber disso Já vi um perfil que tbm fala disso dizendo que as validações devem ser feitas nas entidades pois seriam regras de negócio, o que não tá errado até onde sei, aí eu ficava me questionando como usaria libs de validação como é o caso do Fluent Validation pra c#, mas já deu uma bela esclarecida kkkkk
@dvalmont07
@dvalmont07 4 ай бұрын
Muito interessante essa abordagem. Muito obrigado!
@mauricioantonelli4145
@mauricioantonelli4145 4 ай бұрын
obrigado! conteudo mt bom!
@roberiomaciel2802
@roberiomaciel2802 4 ай бұрын
muito facil entender como voce ensina.Parabens
@ViniciusRamos-cc5cd
@ViniciusRamos-cc5cd 4 ай бұрын
seria um pageobjects?
@alfrfr2662
@alfrfr2662 4 ай бұрын
Excelente conteúdo. Uma dúvida. O seu controlador não implementa nenhuma interface. Tem acesso direto a tecnologia. É isso mesmo? Caso a entrada de dados fosse de um sistema desktop, teria que alterar todo o código do controlador, ou criar outro atrelado a nova camada de visão. Isso não iria ferir o principio OCP do SOLID?
@gabrielvaras7675
@gabrielvaras7675 5 ай бұрын
Muito obrigado pela aula top 🙌
@JorgildoNogueira
@JorgildoNogueira 5 ай бұрын
Estou precisando de sua ajuda sobre os algoritmos
@JorgildoNogueira
@JorgildoNogueira 5 ай бұрын
Bom dia professor
@lucasfelipe-ze5sy
@lucasfelipe-ze5sy 5 ай бұрын
Esse assunto é um tanto quando confuso e cheio de interpretações. Eu mesmo por muito tempo achei que a camada de entidade só poderia ter a definição da entidade, mas não as regras de negócio associadas a ele. Por exemplo, em um sistema crud de usuários, a entidade teria apenas a classe com propriedades como "nome" e "email", Mas as ações relacionadas a essa entidade, como getUser, setUser, editUser e removeUser ficariam na camada de casos de uso. Meu cérebro explodiu quando comecei a perceber que a ideia da camads central não é bem essa
@xsamuelx3603
@xsamuelx3603 5 ай бұрын
:)
@xsamuelx3603
@xsamuelx3603 5 ай бұрын
:)
@Pimenta255
@Pimenta255 5 ай бұрын
Muito obrigado!!!!! <3 <3
@alquimistavoador
@alquimistavoador 5 ай бұрын
No seu controller vc chama dois usecases. Primeiro vc registra o usuário e depois vc envia o email. Saber que o email precisa ser enviado depois que o usuário é registrado não é responsabilidade do próprio usecase de registrar usuário? Eu entendo que conhecer e executar esse tipo de fluxo é responsabilidade do usecase, e não do controller. Mas não sei, ainda estou em processo de aprendizado da arquitetura limpa. Consegue me tirar essa dúvida?
@otaviolemos
@otaviolemos 5 ай бұрын
No curso eu mudo isso. Crio um terceiro use case que chama os outros dois sub casos de uso.
@ezekidev9044
@ezekidev9044 6 ай бұрын
Como dev Junior afirmo que teus vídeos ajudam demais. Obrigado Otávio Lemos!!
@davidshelton5206
@davidshelton5206 6 ай бұрын
Agradeço pelo vídeo
@dmarczal
@dmarczal 6 ай бұрын
Olá Otávio, parabéns pelos seus vídeos, bem interessantes. Sobre o rails, um vídeo interessante do DHH, kzbin.info/www/bejne/fnWuhniOd6tmeJYsi=rLIxq9az8RGh608c. Rails foi um dos primeiros frameworks MVC, trouxe muita agilidade ao desenvolvimento web, e facilitou/incentivou o uso de testes, tanto que muitos frameworks foram inspirados nele, como o Laravel. Parece ter um grande acoplamento, mas talvez nem tanto, por exemplo, trocar de banco e fácil, usar dois bancos na mesma app também. Talvez uma das melhores implementações de MVC realmente orientada a objetos e bem flexível.
@otaviolemos
@otaviolemos 6 ай бұрын
Boa! Eu achei bem legal o documentário sobre o Rails: kzbin.info/www/bejne/fnWuhniOd6tmeJYsi=84MOXLhuXrKx7Bqh
@matheusz_nied
@matheusz_nied 6 ай бұрын
Ficou muito claro professor. Valeu!
@pabllomartin27
@pabllomartin27 6 ай бұрын
Caraca! Esse canal é mto bom!
@lucasxciv
@lucasxciv 6 ай бұрын
Nos projetos em que trabalhei que tinham uma arquitetura de camadas mais desacoplada, a atualização de dependências externas e da linguagem eram feitos de forma muito rápida (muito devido à cobertura de testes também). E era possível ter mais testes unitários -- [quase] sem usar mocks, o que ajudava ter um feedback mais rápido na hora de rodar os testes. Apesar de muitas ferramentas atualmente resolverem muito bem a persistência dos objetos no banco, acho que a utilização do padrão data mapper facilita a separação de responsabilidade; e para projetos com regras de negócio mais complexas, pode ajudar mais com a manutenção.
@noriller
@noriller 6 ай бұрын
Digamos que ta tudo feito em GoHorse. Novas coisas, você faz usando GoHorse, ou já faz em algo melhor? E, tendo que mexer em algo, já separa e vai melhorando o que dá ou deixa quieto? (digamos que precise mexer em um tanto substancial) Eu entendo que tem muito código ruim rodando coisas importantes, mas pessoalmente, se vou mexer em algo substancial, primeiro vejo se tem e adiciono uns testes, depois dou uma refatorada, melhoro o que der e vou comentando o que fui aprendendo onde não der... só então eu "começo a trabalhar".
@gui5352
@gui5352 6 ай бұрын
Concordo plenamente, enfrentei bastante dificuldade ao ingressar no mercado pois eu sempre fui um adepto das boas práticas (Clean Architecture, Clean Code, testes automatizados, TDD, etc..). E ao entrar na empresa e dar de cara com um enorme legado foi um um grande desafio. Lutar diariamente contra a sindrome do impostor ao ver que eu mal conseguia colocar aquela coisa pra rodar era desesperador kjk mas ainda consegui ficar alguns meses lá e por incrível que pareça fui promovido em um mês. Infelizmente, minhas ideias em relação a qualidade de software e a inclusão de boas práticas não eram muito bem vistas pelos meu colegas que alegavam diminuição da produtividade, e depois de um tempo eu acabei saindo de lá. No fim, embora os fatores negativos, essa experiência expandiu mais a minha visão sobre o mercado e contribuiu para a minha maturidade como programador.
@pedropaulino6289
@pedropaulino6289 6 ай бұрын
Professor, uma dúvida / pedido: Por que não "podemos" utlizar TDD e Clean Arq. com Rails ? Vejo muita gente meter a boca no Rails sempre com o argumento de que "não escala", porém a galera que xinga é a mesma que utiliza Github, Gitlab, Shopify, AirBNB entre outros e não fala nada. Então o problema do Rails(I.M.H.O) é o mesmo problema do Marea: Carro bom que o usuário ferrou. Vejo bons programadores utilizarem Rails e Ruby sem nunca reclamar de nada, porém tenho a impressão que que quem fala mal de linguagem ou framework X ou Y são pessoas que sequer poderiam ser consideradas programadoras, muito menos Engenheiros de software, pq nunca sequer leram a documentação da linguagem. Tudo vira uma desculpa pra não usar outra tecnologia que ele não sabe usar pra não ter o trabalho de aprender aquela nova tecnologia ou talvez por medo mesmo de sair da zona de conforto: "ahh, tecnologia X é ruim, não escala, é cara, é não sei o que", porém o dev em questão sequer analisou o escopo do problema ou o código pra saber se o produto atende as demandas do usuário. Poderia dar um exemplo de C.A com esse framework ? Seria bacana entender como podemos utilizar as melhores práticas de programação com qualquer tecnologia;. PS: Meu ex-chefe dirige um Marea 2.4L I5 20V há mais de 10 anos e nunca quis trocar muito menos deu algum tipo de problema, além de manutenção básica: óleo, pneu, correia, etc.