Padrão de Projeto State: Domine o Design Pattern de Transições de Estado com Orientação a Objetos!

Поделиться
HTML-код
  • Опубликовано: 21 ноя 2024

Комментарии • 63

  • @edum4rques
    @edum4rques 11 дней назад +6

    “Vc é doido?” 😂😂😂
    Parabéns pelo conteúdo meu querido!

  • @miltonjunior4734
    @miltonjunior4734 17 дней назад +6

    Cara, não tem como não entender quando você explica!! Meu Deus!!! Mano, já falei e repito, tu é o mais brabo! Vídeo curto, sem enrolação, didática excelente. Me amarro demais assistindo suas aulas mano!!

    • @RenatoAugustoTech
      @RenatoAugustoTech  17 дней назад

      Hahahah! valeu demais Milton... Pra semana que vem vou estruturar uma comunidade pra gente no discord ou qualquer rede parecida pra gente trocar uma ideia mais de perto!!!

  • @ricardao069
    @ricardao069 5 дней назад +1

    Cara seus videos sao simplesmente perfeitos pqp claro e objetivo, parabens mano.

  • @gabrielalbernaz1800
    @gabrielalbernaz1800 2 дня назад +1

    Parabéns pelo conteúdo, didática absurda, maratonando os videos do canal 😅

    • @RenatoAugustoTech
      @RenatoAugustoTech  2 дня назад

      Valeu Gabriel!! Tmj e qualquer dúvida larga aí nos comentários!!

  • @douglasmatosdasilva
    @douglasmatosdasilva День назад +1

    Top🎉 simplesmente sensacional 🎉

  • @vando2p0
    @vando2p0 12 дней назад +2

    Uma das formas mais simples e didáticas que já vi de apresentar um conceito.

  • @marcusmliima
    @marcusmliima 17 дней назад +2

    Tua didática é muito boa, a pouco estou mexendo mais com POO e consegui entender a mudança de estados através da passagem do this e a cada step ele foi chamando os outros objetos, massa demais Renato!

    • @RenatoAugustoTech
      @RenatoAugustoTech  17 дней назад +1

      Que top que curtiu@@marcusmliima!!! Esse é um dos padrões mais chatos de se aprender por conta do momento das transições através do this e se tu conseguiu entender de boa pode ter certeza que teu nível já tá bem avançado em POO

  • @nilsonnogueira3817
    @nilsonnogueira3817 18 дней назад +2

    Fala Renato, achei o seu canal agora.. muito bom ... estou começando agora no mundo da programação. Obrigado pelo vídeo e vida longa ao Canal.

    • @RenatoAugustoTech
      @RenatoAugustoTech  18 дней назад

      Fala @@nilsonnogueira3817 !! Que top que curtiu os conteúdos!! Fica ligado que essa semana vai sair video pra quem tá iniciando!!

  • @TheSoundKumbuka
    @TheSoundKumbuka 8 дней назад +1

    Sua didática é excelente, continue nos ensinando pvf ...

    • @RenatoAugustoTech
      @RenatoAugustoTech  8 дней назад

      Valeu pelo feedback e deixa comigo!! Já estão vindo mais conteúdos por aí!!

  • @xikaojr
    @xikaojr 15 дней назад +1

    @Renato Augusto, tem que regravar com o php 8.4 já utilizando os novos estados e get,setters. Top!

    • @RenatoAugustoTech
      @RenatoAugustoTech  15 дней назад

      @@xikaojr eu até cogitei usar o 8.4 mas como muda bastante a sintaxe na parte de getter e setter poderia confundir a cabeça da galera que ainda não manja e principalmente quem tava replicando em outra linguagem mas tá anotada a dica!!!

  • @joaodavioliveira9162
    @joaodavioliveira9162 11 дней назад +1

    Conteúdo muito top!! Veio num momento perfeito pra mim, parabéns! Bacana que mesmo com explicações em PHP (que eu não conheço quase nada) da pra entender facilmente o conceito para Node.js por exemplo.

    • @RenatoAugustoTech
      @RenatoAugustoTech  11 дней назад

      A intenção é exatamente essa, essa playlist eu poderia fazer em outras linguagens inclusive em Node mas optei por utilizar PHP pra que as pessoas vejam o quanto ele evoluiu ao longo do tempo e que o problema nunca foi a linguagem e sim os próprios programadores que fizeram muita besteira no passado!

  • @arvoretecnologia7789
    @arvoretecnologia7789 17 дней назад +2

    Excelente conteúdo!!

  • @francielefernandes205
    @francielefernandes205 11 дней назад +1

    Muito bommm o vídeo, só fiquei em dúvida sobre implementação do banco de dados, como salvaria e atualizaria cada estado!?

    • @RenatoAugustoTech
      @RenatoAugustoTech  11 дней назад +1

      Existem algumas formas de fazer isso, a primeira é você criar um método dentro de cada estado que retorne o nome dele no formato de string Ex: toString() ou até mesmo um getName() com isso você já consegue inserir no banco sem dificuldades só vai precisar de uma lógicazinha na hora de recuperar os dados do banco e hidratar os objetos, agora se você estiver usando um framework fica simples pq basta você configurar seu ORM mas como cada ORM em cada framework tem configurações específicas fica difícil acertar aqui de cabeça dai te digo que uma rápida pesquisa e tu já consegue desenrolar inclusive eu já fiz essa implementação usando o Doctrine que é o ORM do symfony..
      Essa semana agora vou aprontar um grupo pra os inscritos no discord ou telegram aí a gente troca essa ideia mais de perto e fica mais simples de passar esses truques

    • @francielefernandes205
      @francielefernandes205 9 дней назад

      @@RenatoAugustoTech Como faço para entrar no canal e no servidor?

  • @dharyelsantoshonorio5890
    @dharyelsantoshonorio5890 11 дней назад +1

    didática incrível. Valeu, monstro

  • @rafaelts99
    @rafaelts99 10 дней назад +1

    Muito didático! Parabéns e obrigado Renato.

  • @douglasfernando3845
    @douglasfernando3845 12 дней назад +1

    Me ajudou bastante sua explicação, muito obrigado irmão.

  • @eduardospek
    @eduardospek 19 дней назад +1

    Esse padrão é muito bom!!

  • @jfbarkokebas1902
    @jfbarkokebas1902 7 дней назад +1

    Excelente conteúdo, mas apareceu uma dúvida: esse padrão pode ser aplicado para um objeto persistente, por exemplo um projeto? Porque me parece fácil persistir ele em uma base de dados mas pra recuperar parece inevitável criar um switch para poder transformar o dado persistido no objeto correspondente ao estado.

    • @RenatoAugustoTech
      @RenatoAugustoTech  7 дней назад

      @@jfbarkokebas1902 excelente pergunta!!! Se você tiver utilizando algum ORM da pra configurar o ORM pra fazer esse trabalho automático pra ti pelomenos todos os ORMs que ja utilizei com esse pattern fornecem uma forma de configurar! Se nao estiver utilizando um ORM tem algumas formas de fazer isso como por exemplo criar uma propriedade no estado que seja o nome dele mesmo formatado pra string daí você adiciona a primary key da tabela de estados no banco como o nome do próprio estado ao invés do ID, com isso tu já consegue fazer a busca dele no banco pelo próprio nome... existem outras formas, tendo um tempo vou gravar um vídeo sobre isso, talvez um state parte 2, pq vi que tem uma galera que levantou os mesmos questionamentos!!

  • @gustavomaia3127
    @gustavomaia3127 7 дней назад +1

    já conhecia esse padrão, acho super interessante, porém agora assistindo o vídeo e pensando, ele não inflinge o I do SOLID?

    • @RenatoAugustoTech
      @RenatoAugustoTech  7 дней назад

      Fala Gustavo!! Não infringe não, acredito que vc esteja perguntando isso por conta do estado receber o Pedido certo?! Se for isso pode ficar tranquilo, em alguns momentos certos acoplamentos são necessários e outra, todos os patterns em algum momento tem pontos de desvantagens e alguns sim chegam a ferir alguns pontos do SOLID enquanto resolvem outros. Vou trazer conteúdo falando sobre isso também

  • @arozendojr
    @arozendojr 13 дней назад +1

    Muito bom seus vídeos

  • @wallisonfelipe5997
    @wallisonfelipe5997 3 дня назад +1

    Uma dúvida, isso não fere o "S" do SOLID? Pois, supondo que eu tenha um outro estado como "Devolução a loja", eu teria que alterar o código nos outros 3 arquivos de estado + criar um novo arquivo pro novo estado?
    PS: Sua didática é excelente

    • @RenatoAugustoTech
      @RenatoAugustoTech  3 дня назад +1

      Fala Wallison, não tem problemas se caso surgir mais um estado e você modificar alguma coisa ou outra, repara que isso afeta somente como o estado de um pedido se comporta então tá tudo bem, no final das contas a gente sempre vai acabar em algum momento ou outro infringindo o SOLID, a sacada tá em saber quando fazer isso ou não... eu vou preparar um conteúdo essa semana falando sobre isso. E valeu pelo feedback posítivo!!

  • @ediponascimento532
    @ediponascimento532 20 дней назад +1

    Top demais!

    • @RenatoAugustoTech
      @RenatoAugustoTech  20 дней назад

      @@ediponascimento532 prepara que tá vindo mais conteúdos por aí!!!

  • @kbarreto
    @kbarreto 8 дней назад

    Chain of Responsibility se encaixaria melhor nesse exemplo, não curti muito o fato de cada estado implementar todos os métodos e ficar lançando exceções nos métodos não usáveis. Ótimo vídeo!

    • @RenatoAugustoTech
      @RenatoAugustoTech  8 дней назад +1

      Chain Of Responsibility funciona como um middleware pra controlar uma cadeia de fluxo que precisa acontecer e tem uma ordem estabelecida, o State é pra transição dos Estados de um objeto o chain não caberia aqui pois seria muita complexidade pra transitar os estados e o chain só anda pra frente, se eu tivesse um estado CANCELADO por exemplo ja nao seria mais possivel implementar o chain pq qualquer estado poderia pular direto pra CANCELADO nao sendo necessario respeitar a ordem. Quanto aos métodos implementados e lançamento de exceções é simples de resolver, basta trocar a interface por uma classe abstrata e nela já implementar todos os métodos lançando exceções e dai cada estado apenas sobrescreve o método do estado ao qual pode transitar. Essa variação também é aceita no GOF mas preferi seguir o exemplo tradicional msm

  • @thevocoder
    @thevocoder 20 дней назад +1

    Po, se tu continuar com esses vídeos eu vou a sênior em 2 meses 😅

    • @RenatoAugustoTech
      @RenatoAugustoTech  20 дней назад

      @@thevocoder hahaha! Cara que bom que curtiu o vídeo... inclusive se você conseguiu se sentir confortável no vídeo é sinal de que você já está bem avançado!!

  • @JhonathasCavalcante
    @JhonathasCavalcante 19 дней назад +2

    Top o vídeo, só uma observação, você deixou um método público setEstado, dessa forma, ainda daria pra burlar as regras de negócio

    • @RenatoAugustoTech
      @RenatoAugustoTech  19 дней назад +1

      @@JhonathasCavalcante infelizmente esse é um dos problemas do state, ele precisa desse método setter, não tem pra onde fugir, até o próprio refactoring guru também força o uso dele. Um ponto que sempre deixo claro é que padrões de projeto também possuem defeitos, existem outras formas de implementar o state como utilizar herança ao invés de interfaces mas ainda assim o método setter permaneceria público

    • @JhonathasCavalcante
      @JhonathasCavalcante 19 дней назад +2

      @RenatoAugustoTech sim, talvez uma forma de contornar seria com meta programação usando reflection, mas aí acho que aumentaria a complexidade e dificultaria a explicação. A ideia de classes abstratas também é uma boa, de qualquer modo, parabéns pelo conteúdo

    • @RenatoAugustoTech
      @RenatoAugustoTech  19 дней назад

      @@JhonathasCavalcante haha!! valeu demais!! Sim quanto a usar reflexão é uma saída inteligente porém tem algumas linguagens que não dão suporte então ficaria sim bem mais complexo de explicar principalmente pra galera que tá iniciando mas tu fez uma pontuação extremamente válida, muito bom mesmo! E vem mais conteúdos por aí fica ligado!!!

    • @JhonathasCavalcante
      @JhonathasCavalcante 19 дней назад +1

      @RenatoAugustoTech tamo junto, já me inscrevi no canal, é nozes

  • @alanclever
    @alanclever 7 дней назад +1

    Como seria a recuperação desses estados no banco de dados?

    • @RenatoAugustoTech
      @RenatoAugustoTech  7 дней назад

      basicamente você pode implementar um método getName ou toString em cada estado e retornar o nome de cada um deles formatado pra string, com esse valor você salva no banco inclusive pode até colocar a primary key como o nome do estado na tabela do banco ao invés do ID. Tem várias outras alternativas pra fazer isso e vai depender do cenário Ex: se você estiver usando um framework que dá suporte a entidades e repositórios você consegue com uma simples configuração fazer isso também.

  • @WilliamNovasky
    @WilliamNovasky 9 дней назад

    Excelente conteúdo, mas minha dúvida é em como persistir isso no banco de dados? Posso identificar cada estado com integer, utilizando algum tipo de __toString() pra retornar o valor e salvar no banco de dados?

    • @RenatoAugustoTech
      @RenatoAugustoTech  9 дней назад

      @@WilliamNovasky eu respondi essa mesma pergunta abaixo William mas tu já matou!! É exatamente isso que vc falou, a única coisa que eu faria de diferente é que ao invés de representar cada estado com um integer eu faria com que a chave primária da tabela de estados não fosse o ID e sim o próprio nome do estado... então no tostring eu retornaria o nome do estado formatado pra string e armazenaria no banco, porém é totalmente válido vc usar o integer. Tu foi sagaz na solução hahah!!

    • @WilliamNovasky
      @WilliamNovasky 9 дней назад

      ​@@RenatoAugustoTech Ahh que legal Renato. E nesse caso eu ainda poderia usar os "novos" ENUMS do PHP, correto? Cara, adoraria um vídeo sobre ENUMS pra entender melhor isso, caso vc tenha interesse em explorar melhor isso. Eu costumo usar arrays para controlar States e sempre tem chance de dar muita caquinha

  • @felipevieira8955
    @felipevieira8955 16 дней назад +1

    Qual IDE você usa?

    • @RenatoAugustoTech
      @RenatoAugustoTech  16 дней назад

      Fala Felipe!! Eu uso o phpstorm, excelente IDE e se você estiver usando qualquer outra linguagem diferente do PHP dá uma olhada no site da jetbrains, eles tem IDE pra qualquer tipo de linguagem

    • @bdexterholland
      @bdexterholland 14 дней назад +1

      PHP storm

    • @RenatoAugustoTech
      @RenatoAugustoTech  14 дней назад

      Eu jurava que tinha respondido mas valeeu @bdexterholland !!!

    • @bdexterholland
      @bdexterholland 14 дней назад +1

      @@RenatoAugustoTech tinha sim, a interface do RUclips no cel que só mostrou que havia resposta depois que eu respondi

  • @DiarioMinecraft
    @DiarioMinecraft 20 дней назад +1

    Fala meu querido, só uma dica: posta os vídeos em horário 'comercial', fora de horário não é muito interessante...

    • @RenatoAugustoTech
      @RenatoAugustoTech  20 дней назад +2

      Hoje foi um dia bastante corrido e como já tinha fechado uma semana do último vídeo decidi por postar hoje tarde pra não perder o timing, mas valeu demais pela dica!!