Semana do Flutter | Clean Architecture #2 - O Domain

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

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

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

    Conteúdo muito bom! Bastante claro.

  • @FlutterandoTV
    @FlutterandoTV  4 года назад +18

    Esse conteúdo só é possível graças aos Membros do Canal Flutterando!!
    A Todos os membros muuuuuito obrigado Devs por todo o apoio!!
    Link do Clean Dart:
    github.com/Flutterando/Clean-Dart

  • @brunoleonardoramosribeiro8451
    @brunoleonardoramosribeiro8451 4 года назад +3

    Melhor série de todos os tempos na última semana.

  • @iagonovoa272
    @iagonovoa272 4 года назад +5

    Excelente cara, os conceitos de SOLID e clean architecture, parabéns e obrigado pelo conteúdo!

    • @mundoprogramado3106
      @mundoprogramado3106 Год назад

      9:20 acho que cabe uma discursão, uma vez o call já define que será apenas aquele método. Ou seja, aplicado: Single Responsibility Principle e Liskov Substitution Principle. Não há nada referindo para tormar a decisão de uma segunda classe.

  • @cavalinhopocoto
    @cavalinhopocoto 4 года назад +1

    Muito bom! Parabéns Jacob.

  • @marciozebedeu
    @marciozebedeu 4 года назад +1

    Não há como exprimir o quão bom foi essa aula :)

  • @rodrigomacedo9996
    @rodrigomacedo9996 4 года назад +1

    Excepcional!!! Parabéns!

  • @danillofidelgomes6822
    @danillofidelgomes6822 3 года назад

    Tbm sou iniciante, venho do javascript, e me perco mto nesses conceitos, mas seu conteúdo esta perfeito! aos poucos vou absorvendo...

  • @Gianluca0000
    @Gianluca0000 Год назад +4

    Pro pessoal que tiver problemas de null-safety nos testes, recomendo usar o Mocktail

    • @xluzka
      @xluzka 5 месяцев назад

      Nossa muito obrigado mano!!! Fiquei uns belos minutos caçando o que fazer auhauhuah

  • @ianoliveiradev
    @ianoliveiradev 4 года назад

    essa série está muito fantástica!!!

  • @viniciusalmeida3246
    @viniciusalmeida3246 2 года назад +4

    Cara tá bem difícil acompanhar o curso estando na versão com null safety, consegui avançar um pouco com os comentários, mas ainda estou travado, já está bem diferente do vídeo.

  • @leonardoguerreiro7635
    @leonardoguerreiro7635 3 года назад +3

    to pegando um erro no expect do primeoro
    expect(result | null, isA());
    Diz que The argument type 'Null' can't be assigned to the parameter type 'List'
    Não consegui achar a causa
    Aula muito boa parabéns!

    • @felipeanndrade
      @felipeanndrade 2 года назад +3

      pq com o null safety o List nunca pode ser nulo, para solucionar vc adiciona operador nullable, ficando assim:
      List? Tanto na classe abstrata, quanto em sua implementação.

  • @gabrielinaciodev
    @gabrielinaciodev 4 года назад

    Muito bom! Sou iniciante, mas assistindo esse tipo de conteúdo fico inspirado, parabéns!

  • @erickmaiadasilva6260
    @erickmaiadasilva6260 4 года назад

    Muito bom, parabéns 🙂

  • @underfilho
    @underfilho 2 года назад

    geralmente onde ficaria o SearchByTextImpl? Dentro do próprio usecases tbm?

  • @makeemoneey
    @makeemoneey 2 года назад

    atualiza essas aulas práticas do clean architecture para o flutter com null safety

  • @mthsena
    @mthsena 4 года назад +2

    Jacob qual a diferenca entre entities e models? Ja li muito sobre isso e queria ouvir de voce, obrigado.

    • @FlutterandoTV
      @FlutterandoTV  4 года назад +2

      Podemos dizer que a Entidade é um Objeto do "Domain", enquanto o Model seria uma forma de visualizar essas informações do mundo real.
      Porem esse termo pode ter vários significados, por exemplo, uma entidade em Banco de Dados seria as tabelas. Aqui para a gente pode ser o que mais perto representaria a regra de negócio exportada para o "Mundo Real". Dentro de uma entidade vc pode ter validações e até mesmo outras coisas como regra de negócios relacionada a ela. Como no Clean Arch temos que respeitar tb os principios de Reponsabilidade única acabamos por deixar ela muito semelhante a um Modelo anêmico. Você vai ver eu usando um Model na próxima aula, e acredito que isso tb ajudará a sanar essa dúvida

    • @mthsena
      @mthsena 4 года назад +1

      Saquei, provavelmente no exemplo pratico a ficha cai, valeu.

  • @d-apps2699
    @d-apps2699 3 года назад

    Vi que na classe abstrata SearchByText você usou o call() para poder dar usecase() , direto, em vez de usar execute, mas e quando a classe abstrata terá mais de um método, como fica?

  • @felipeduartebarbosa7009
    @felipeduartebarbosa7009 Год назад

    Cara uma duvida, um modulo pode ver o outro ? tipo, eu tenho uma entidade chamada Contas a Pagar que esta dentro do Modulo Financeiro, dentro dessa entidade, quero declaras uma propriedade que eh uma entidade de outro Modulo, que no caso seria o Modulo Cliente, isso estaria correto ?

  • @Gvfm1596
    @Gvfm1596 4 года назад +1

    Jacob, nao seria melhor separar as implementações e os contratos em arquivos diferentes? E usar notação do tipo interface no nome da classe para tornar mais limpo ?
    do tipo: i_search_by_text.dart ; search_by_text ou i_search_by_text.dart ; search_by_text_impl
    Outra coisa seria usar os commits individuais com as tipagens ( git-commit-msg-linter). ex "feat: ensure SearchResult should return a list of results"

    • @FlutterandoTV
      @FlutterandoTV  4 года назад

      Nesse caso achei que teria muitos arquivos, entao no usecase use dessa forma, mas nos outros exemplos a gente tem abstraçoes em um arquivo e as implementacoes em outros. Mas nao significa que está errado ou certo separar, é apenas um limite que decidi nao ter por isso. (Algumas pessoas nem colocam contratos nas implementações dos usecases e outras pessoas implementam o usecase em uma outra camada)

    • @BwolfDev
      @BwolfDev 4 года назад

      Eu prefiro: search_by_text_interface.dart ; search_by_text no nome arquivo e na class ISearchByText e SearchByText na classe

    • @Gvfm1596
      @Gvfm1596 4 года назад

      Flutterando Eu sei que nada e obrigatório, por isso levantei como sugestão , estou atualmente em um projeto em node com TS , e aplico interface em tudo , hj me da o dobro do trabalho, porem quando um Jr pegar o codigo , ele vai ficar restrito a fazer alterações que o contrato propõe, assim fica mais facil pra evitar erros por parte dos outros , e facilita a leitura e implementação de novas features , ate os imports eu fixo em um arquivo, enfim , joguem duro, asioso pelos próximos episodios.

    • @Gvfm1596
      @Gvfm1596 4 года назад +1

      @@BwolfDev Perfeito

    • @BwolfDev
      @BwolfDev 4 года назад +1

      @@Gvfm1596 Essa forma de usar I no inicio eh coisa do C# e imp eh coisa do java =)

  • @steniooliv
    @steniooliv 3 года назад +1

    Fala Jacob, tudo na paz?
    Estou implementando utilizando o Flutter 2.5, tive problemas com null safety no primeiro e segundo teste e consegui resolver, mas estou com um problema de tipagem quando uso o return Left(

    • @davioliveirateixeira17
      @davioliveirateixeira17 2 года назад +1

      Tive o mesmo problema, eu estou na versao 3.3.3 do FLUTTER
      No minuto 26:24 eu tive esse problema.
      Eu consegui resolver passando um return Future.value(Left(InvalidTextError()));
      Espero que ajude possa ajudar..

  • @jardelsobrinho
    @jardelsobrinho 4 года назад

    Parabéns Jacob, excelente curso. Só que tenho uma dúvida. Em um app mais complexo. Que possui as features Cliente, Produto e Pedido. A features Pedido precisa fazer referência a produtos e pedidos. Como se faria isso?

    • @FlutterandoTV
      @FlutterandoTV  4 года назад

      Eu acredito que esse seria o mesmo modulo e nao separado

  • @eduardomattos5279
    @eduardomattos5279 2 года назад

    No caso de uma entidade ser útil em mais de um módulo, por exemplo, uma entidade de produtos que pode ser utilizada em um módulo de produtos e em outro módulo de carrinho de compras, qual seria a forma correta de usar as entities?

    • @juniorgutekoski6582
      @juniorgutekoski6582 2 года назад

      Estou com essa mesma dúvida. Não sei se colocaria na pasta core para uso global e faria uma DI.

  • @renan7246
    @renan7246 4 года назад +1

    Qual extensão que vc usa para poder exibir o erro inline, ao invés de ter que passar o mouse em cima do erro? (exemplo aos 01:54). Aliás, qual tema do vscode você está usando? :)

  • @ciceromslacerda
    @ciceromslacerda 3 года назад +1

    Cara, parabéns. Só uma dúvida: usar o DartZ puro assim não cria um forte acoplamento com uma biblioteca de terceiros?

    • @FlutterandoTV
      @FlutterandoTV  3 года назад

      Causa.
      Por isso não existe desacoplamento, e sim baixo acoplamento.
      O Either é importante pra fazer o dev tratar o erro, mesmo que forçadamente, e isso o torna bom pra arquitetura

    • @ciceromslacerda
      @ciceromslacerda 3 года назад

      @@FlutterandoTV Entendi. Obrigado

    • @aislanarislou
      @aislanarislou 3 года назад

      O ideal seria isso ter nativo na linguagem Dart e o compilador ser esperto o bastante pra forçar você a tratar.
      Outras linguagens possuem isso através de pattern matching e etc.

  • @eliabekun
    @eliabekun 2 года назад

    Estou tendo problemas com o null safity. O teste está dando o erro: type 'Null' is not a subtype of type 'Future'. Como faço para adaptar?

    • @walisonebeatriz6115
      @walisonebeatriz6115 2 года назад +5

      O mockito 5.0.0 e superiores suportam null safety através de geração de código. Para executar a geração de código necessária, é preciso adicionar mais uma dependência no dev_dependencies chamada build_runner. Daí você deve criar o arquivo de teste com uma anotação especificando o mock.
      Exemplo:
      import 'package:mockito/annotations.dart';
      @GenerateMocks([SearchRepository])
      void main( ) {
      }
      e executar um comando no terminal: flutter pub run build_runner build.
      Esse comando vai gerar um arquivo de mock na mesma pasta do arquivo de teste que pode ser importado no arquivo de teste.
      Exemplo:
      final repository = MockSearchRepository();

  • @RobertoAlvesBronco
    @RobertoAlvesBronco 3 года назад

    Pelo amor de Deus.
    Preciso de ajuda. Estou há dois dias vasculhando a internet e quebrando a cabeça para resolver um problema e não consigo.
    Estou brincando uma estrutura muito similar a essa, mas no caso teste que é para validar o retorno de uma lista de entidade, o repositório mock devolve para o use case sempre uma lista nula quando não era para ser.
    Se alguém puder me ajudar eu agradeço:
    A interface
    Future searchTitle(String title);
    O Mock
    class DishRepositoryMock extends Mock implements IDishRepository {}
    no main instancio
    repository = DishRepositoryMock();
    O Problema está nesse ponto:
    test('title parameter searched', () async {
    var listResult = dishList;
    when(repository.searchTitle(any))
    .thenAnswer((_) async => Right(listResult));
    dishList é uma função que retorna uma lista de entidades Dish. No debbug está gerando certo. Só que o usecase chama o método Search mockado e devolve um null para a chamada abaixo.
    var result = await searchUseCase.searchTitle("dish");

    grato se alguém puder ajudar. Estou começando

    • @FlutterandoTV
      @FlutterandoTV  3 года назад

      manda la no discord ou telegram.

    • @RobertoAlvesBronco
      @RobertoAlvesBronco 3 года назад

      @@FlutterandoTV não estou conseguindo acessar o discord a verificação de e-mail da como já registrado

  • @Caiodenadai1
    @Caiodenadai1 3 года назад

    Abandonei pela quantidade de propaganda do RUclips. Se fizer um curso pago me avise

    • @FlutterandoTV
      @FlutterandoTV  3 года назад +1

      O RUclips está chato mesmo. Usa o RUclips Premium

  • @michaelsreact2407
    @michaelsreact2407 4 года назад

    Galera eu tenho uma duvida, talvez alguém possa me ajudar.
    No caso da pasta entities, ele criou o "product", mas, caso eu estivesse em uma outra aplicação que tenha outros módulos (alem do search) e tivesse a necessidade de utilizar o "product" como seria essa comunicação.
    Vlws!!

    • @FlutterandoTV
      @FlutterandoTV  4 года назад

      Vc pode criar um Modelo DTO, ou pode ler o proprio Product, o grande problema e que vc tera que ter um adapter ou Mapper, entao ´e melhor enviar um model que herde de sua entidade e que faca isso

    • @jardelsobrinho
      @jardelsobrinho 4 года назад +1

      Também tenho essa mesma dúvida. Em um projeto com várias features, tipo cliente, produto e pedido. A feature pedido precisa acessar os recursos do cliente e produto. Como se faria isso. Já pesquisei em todo lugar na internet e não achei a resposta.

  • @cassiovidal2798
    @cassiovidal2798 4 года назад +2

    Otima série, porém o link não ficou pinado do Either. O link seria este abaixo?
    ruclips.net/video/QyH9UoHTeC8/видео.html

  • @mateusjbarbosa99
    @mateusjbarbosa99 4 года назад +3

    Tem como dar mais de um like?