Skip to content

Instantly share code, notes, and snippets.

@luanpcweb
Last active April 15, 2020 20:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save luanpcweb/bde4f4a3da021fd0be81769be9d68250 to your computer and use it in GitHub Desktop.
Save luanpcweb/bde4f4a3da021fd0be81769be9d68250 to your computer and use it in GitHub Desktop.

Dúvidas

1 - Tipo fiz uma sequência aqui de mudanças no código, a lógica ficaria mais ou menos assim?

  • app/TweetPostRequest

    Faço as validações no campos que chegam da request. username e body. No username eu faço a validação se é requerido, se tem espaço e se começa com '@'. No body eu faço a validação se é requerido somente;

  • app/Http/Controllers/TweetController

    No método store eu instancio a classe Service/TweetPost passando no construct dela o TweetRepository depois chamando o metodo post dela e passando o body e username da request. Ex:

        $tweetPost = new TweetPost($tweetRepository);
        $tweetPost->store($request->username, $request->body);
    
  • Pego o método da Trait e coloco na classe Service/TweetPost;

  • Em relação aos Repository eu deixo ele fazendo só a função de receber os dados a instância do Model e fazendo o store.

@filhodanuvem
Copy link

filhodanuvem commented Apr 9, 2020

Faço as validações no campos que chegam da request. username e body. No username eu faço a validação se é requerido, se tem espaço e se começa com '@'. No body eu faço a validação se é requerido somente;

Não sei se ficou claro pra voce mas existem validaçoes de request mas também existem validacoes de regra de negocio. Um tweet ter 280 chars ou o usernam ter um @ podem acabar sendo validacoes de negocio (vou chamar essas validacoes de validacoes da camada de domínio). Estamos fazendo isso pra garantir que um tweet nao seja salvo com mais de 280 chars por exemplo, atraves de outro endpoint ou cron job. Algumas podem podem acabar se repetindo, não vejo muito problema.

No método store eu instancio a classe Service/TweetPost passando no construct dela o TweetRepository depois chamando o metodo post dela e passando o body e username da request. Ex:

Sim . Você pode começar com esse código que você citou, mas dá uma olhada nesse link sobre Inversion of Control do Laravel. Você vai chegar na conclusão de que ele vai instanciar esse objeto pra você e passar no construtor do seu controller.

Pego o método da Trait e coloco na classe Service/TweetPost;

Sim, é uma das formas de se resolver. Acho que a trait perdeu a importância então você pode colocar isso dentro do TweetPost. Outra coisa que você também pode fazer é acreditar que o próprio objeto tweet tem a capacidade de entender quais são suas hashtags, então voce teria um metodo getHashtags e ele mesmo faria esse trabalho. Mas podemos deixar isso pra outro dia, siga com a primeira opção se tiver mais confortável.

Em relação aos Repository eu deixo ele fazendo só a função de receber os dados a instância do Model e fazendo o store.

Sim, os repositórios estão lá mais pra ajudar o resto do sistema a resolver problemas que não são regra de negócio. Por exemplo só encapsular a persistência dos dados. https://martinfowler.com/eaaCatalog/repository.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment