Obrigadão cara! Tô aprendendo DDD em dotnet e apesar de fazer um curso completão, esse seu simples vídeo me ajudou bastante, volta e meia vejo novamente para fixar o conceito, muito brigado, sucesso irmão!
@cristianwilliamdev11 ай бұрын
Cara que dahora, DDD é maneiro, enriquece demais a forma como a gente desenvolve e estrutura o código, vai firme mano!
@eng.wandeson2 жыл бұрын
Cara, muito bom! É uma forma inteligente de utilizar a composição!
@carlosoliveiratube Жыл бұрын
Muito bom hein!!! Parabéns pelo video.
@cristianwilliamdev Жыл бұрын
Vlww mano! Da uma olhada no video que falo do porque não uso tanto assim repository, talvez goste da ideia!
@ozielsilva9037 Жыл бұрын
Muito bom cara, me lembro de você, sempre observando as boas praticas. Bom trabalho.
@cristianwilliamdev Жыл бұрын
Feraaaa Oziel! Me lembro de voce mano! Maneiro de ver por aqui! Vlwww demais pela visita mano!
@AndersonSchmitt10 ай бұрын
Primeiro vídeo que vejo do seu canal. Já me inscrevi! Demais!!!
@cristianwilliamdev10 ай бұрын
Porra que foda mano! FIco feliz demais de saber disso!
@robertoshendoo41652 жыл бұрын
excelente conteúdo, sempre aprendendo algo novo, fazia meu repositoryBase com apenas o necessário, por exemplo post e update, e o getByName do meu usuarioRepository implementava sem composição, passando meu DbContext, em vez do meu repositoryBase. Espero que seja uma boa prática, pelos dev
@GabrielOliveira-ox4bg8 ай бұрын
Comecei a fazer arquitetura limpa na minha API e estava querendo entender melhor os conceitos a se aplicar em cada camada, foi muito bom sua explicação, eu já fazia isso com as repository pelo seu mesmo pensamento.
@gabrielbezerradesouza9102 жыл бұрын
melhor aula q já vi
@marciokoehler6269 Жыл бұрын
Muito bom teus vídeos irmão. Parabéns. Tô ligado no canal. Abraço
@cristianwilliamdev Жыл бұрын
Vlww mano! Tmj demais!
@emiliosds Жыл бұрын
Muito bacana, essa abordagem resolve uma outra questão não explorada no vídeo, os testes automatizados. Como dito, ao implementar o repositório genérico, o UsuarioRepository teria o Delete, na hora de fazer o teste automatizado, você teria que fazer uma validação para garantir que o Delete não fosse utilizado, porém, conforme ilustrou, o Delete nem deveria existir no UsuarioRepository , ou seja, teria uma validação que nem faz sentido no meu software. Da forma como implementou, o teste não precisa essa validação, deixando o software mais enxuto e mais limpo. Show de bola, obrigado por compartilhar essa estratégia.
@FernandoSilva-yv4bc Жыл бұрын
isso resolve um falso problema, os testes devem ser feitos em funcionalidade,services,case uses, e não em abstrações
@gilmar69047 Жыл бұрын
Eu utilizo este design pattern de uma forma um pouco diferente, mas sua implementação ficou melhor que a minha.... vou anotar aqui no caderninho... parabéns
@cristianwilliamdev Жыл бұрын
Aiii sim mano, implementa e me diz na pratica como ficou...
@gabrielloureirog2 жыл бұрын
Muito obrigado, realmente foi bom para entender as injecções e tudo mais. Só queria saber se tem algum video seu explicando a montagem do RepositoryBase, trazendo o dbContext pra ele e tudo mais... Estou com essa dificuldade.
@gabrieldesouza49272 жыл бұрын
Excelente, muito esclarecedor.
@cristianwilliamdev Жыл бұрын
Vlww 🤘🏻
@JulioBacoli3 жыл бұрын
Que canal top de assistir. Valeu jovem
@cristianwilliamdev3 жыл бұрын
Vlw meu amigo! Tmj!!
@pcbarbassa2 жыл бұрын
Excelente explicação!!! Muito obrigado pela clareza e objetividade!
@duduplaybyt Жыл бұрын
Caramba, as minhas implementações estavam desta forma e ter metodos que eu nao iria utilizar me incomodava bastante. As vezes era comum que eu fizesse algum tipo de validação pra garantir que elas nao fossem utilizadas kkkk. Muito bacana seu video, ajudou bastante!
@cristianwilliamdev Жыл бұрын
Tmj mano! Obrigado pelos comentários!
@rafaelscheffer12622 жыл бұрын
Bem bacana essa implementação composição é um pattern que eu preciso dar uma estudada. No dia a dia acabo usando mta herança com polimorfismo
@cristianwilliamdev2 жыл бұрын
Boaa mano!
@Tibiafy3 жыл бұрын
Cara... muito top essa aula. Parabéns msm
@cristianwilliamdev3 жыл бұрын
Vlw mano! Isso é mega importante
@Tibiafy3 жыл бұрын
@@cristianwilliamdev pois é.. eu estava tentando entender um projeto aqui da empresa que fizeram isso.. ai seu vídeo caiu como uma luva meu kirido. Tmj gratidão
@guilhermevinis2 жыл бұрын
Excelente
@cristianwilliamdev Жыл бұрын
Vkwww mesmo! 🤘🏻🤘🏻
@CledsonPachecoEngComp3 жыл бұрын
Top demais a abordagem!!!
@cristianwilliamdev3 жыл бұрын
Vlww mano!
@Ilovecode2 жыл бұрын
Ta de parabéns mano, excelente explicação.
@cristianwilliamdev Жыл бұрын
Vkwww mesmo! 🤘🏻🤘🏻
@marciokoehler6269 Жыл бұрын
Cara, que top teus vídeos. Muito esclarecedor esse conceito. Abraços irmão.
@cristianwilliamdev Жыл бұрын
Obrigado mano! No proximo, vamos entender pq eu não uso mais repos ashusahuhsua
@marciokoehler6269 Жыл бұрын
@@cristianwilliamdev 😂 Vi que tem umas tretas com o repositório genérico mesmo. Ansioso então pelo próximo vídeo. Abraço
@slopesjoe2 жыл бұрын
Valeu professor Christian! excelente aula!
@jonathansantos31822 жыл бұрын
Muito bom, parabéns👏🏽
@hermesfranklin Жыл бұрын
Sensacional
@paulosantiago7831 Жыл бұрын
Ótimo conteúdo! Deixo como sugestão fazer a mesma versão desse projeto com Dapper. Já me deparei com muitas situações onde o EF não é viável dada a complexidade de bancos de dados antigos e mal relacionados.
@cristianwilliamdev Жыл бұрын
SIm sim, mas o EF atualmente consegue trabalhar montando queries também e tal, mas sim, o Dapper é mais simples de usar, e as vezes mais eficiente! Obrigado pela dica mano!
@otakuPainZ9002 жыл бұрын
Que Aula! #congrats
@OHugoOliveira3 жыл бұрын
Sensacional, parabéns pelo conteúdo Cristian!
@cristianwilliamdev3 жыл бұрын
Muito obrigado Hugo! Legal demais saber disso!
@abn.tecnologia10 ай бұрын
Ótima estratégia!!
@cristianwilliamdev10 ай бұрын
Ai sim! Dahora em mano! Tmj!
@stefanysoaresbento34083 жыл бұрын
Conteúdo incrível!!!
@cristianwilliamdev3 жыл бұрын
Muito obrigado 😃
@nivaldobrasil2 жыл бұрын
muito bom
@cristianwilliamdev Жыл бұрын
Vkwww mesmo! 🤘🏻🤘🏻
@reinaldonascimento2 жыл бұрын
Show!
@Romope2 жыл бұрын
Muito bom mano, uma pergunta...se o RepositoryBase tem 5 métodos e eu preciso de 4 deles, vou ter que ficar implementar os 4 métodos, se for em um repositorio, ok. Mas se for em 30% de todos eles já fica cansativo, no caso eu teria que criar uma nova composição com os 4 métodos onde essas classes herdariam essa nova porção também? E se outros 30% só precisam de 3 metodos? Acaba que a solução que não viola o SOLID fica muuuuuito verboso ter que fazer várias implementações paralelas. Se pensar em um contexto de 100 respositórios....30 usam tudo(5 métodos), 30 usam 4 e 40 usam 3....me encheu de trampo nesse rolê hehe.
@cristianwilliamdev2 жыл бұрын
hahahah isso real fica verboso mano, mas é a solução para que sua classe não seja obrigado a implementar métodos que não precisam... O foco do video foi SOLID... Mas claro que também é importante ver se isso se enquadra em seu cenário sem infligir boas práticas e também o domínio do negócio.
@robinsonrenato2 жыл бұрын
Q show
@antoniomarcos56642 жыл бұрын
Show de bola Cristian. Eu costumo usar o repositório genérico e conhecia e também a injeção de dependência com typeof mas... não herdo o repositório genérico, ou seja conforme recomendado, uso a composição ao invés de herança. Para cada entidade tem a interface de repositório própria mas que pode usar via composição também o genérico. A classe concreta seria meu repositório genérico, que recebe uma entidade qualquer mas que implementa minha interface genérica. Acho que falando ficou um pouco confuso, né? ... class GenericRepository : IGenericRepository... IDog : IGenericRepository ... class DogRepository : GenericRepository, IDogRepository
@cristianwilliamdev Жыл бұрын
Confuso mano, não saquei não sahusahu a
@GilsonConceição-b2g Жыл бұрын
Tooooooop!
@cristianwilliamdev Жыл бұрын
Uhuuuu
@jessicabeatrizdasilva55725 ай бұрын
Que vídeo F O D A !
@apollorealms Жыл бұрын
Sera que isso serve pro meu projeto mobile com sqlite? Tenho uma aplicação com diversas classea diferentes, e todas elas têm operações CRUD. Minha ideia era criar um contexto geral pro banco e implementar genericamente cada operação delas. (Sou iniciante)
@cristianwilliamdev Жыл бұрын
Fala mano! Cara, se esta iniciando é importante sim aprender o repository pattern, e serve para qualquer plataforma este pattern, já que seria algo aplicado na sua api, ali no backend... Então independente de ser mobile, desktop, web, poderia ser aplicado sim. Te convido a assistir um video recente que postei no canal, onde falo o pq não uso tanto assim este pattern! Eu to mais cabeludo, mas confia que é eu mesmo sauhhsuahusa
como não herdo o RepositoryBase preciso injetar o DbSet e ApplicationDbContext ? poderia ter um RepositoryBase minimo pra nao precisar ficar sempre injetando
@joaogabrielv.m328 Жыл бұрын
Mano, que achado foi esse vídeo e seu canal. Ganhou um inscrito
@cristianwilliamdev Жыл бұрын
Vlwww meu brother, vamo que vamos 😌😌
@TecnoPlayCanal Жыл бұрын
E se caso eu tiver uma regra de negócio que usuários acima de 25 anos não podem ser adicionados. Em qual camada essa regra de negócio ficará?
@cristianwilliamdev Жыл бұрын
Isso é uma regra de negócio, eu aplicaria no dominio da aplicação... Ou seja, a sua aplicação não poderia deixar criar uma classe usuario com idade superior a 25 anos... Eu gosto da ideia de não deixar criar um objeto invalido
@jesusvieiradelima Жыл бұрын
Muito bacana a aula, aprendi muito.. Você tem algum exemplo usando o padrão Service Pattern ??
@cristianwilliamdev Жыл бұрын
Ainda não, ta na fila aqui
@gustavomelo3718Ай бұрын
Eu tava pensando sobre o que você falou sobre ferir solid. O fato do meu repositório ter um método não significa que eu tenho que usá-lo, não é? E também penso que o domínio ter uma regra fica em nível de abstração diferente da sua infraestrutura ter uma capacidade. Além disso pode ser que aconteça de um dia você ter que deletar um usuário e nesse cenário, como ficaria o código? Voltaria a usar o repositório base ou teria duas implementações de deletar?
@tomasmonteiro9570 Жыл бұрын
Excelente explicação 👏👏 So uma pergunta: que IDE é essa?
@cristianwilliamdev Жыл бұрын
Salve mano! Eu uso o Rider IDE, ele é uma IDE da JetBrains, como estou no MAC, ele é melhor, pois o VS do Mac será descontinuada pelo Tio Bill!
@tomasmonteiro9570 Жыл бұрын
@@cristianwilliamdev Opah, legal! Achei essa IDE muito atraente e mais leve que o Visual Studio
@rodrigo-tj1gf Жыл бұрын
krl pior q em um projeto particular meu eu tive exatamente esse problema, mas apenas ignorei msm pq o projeto era meu e ngm mais ia mexer mas eu fiquei curioso com o caso em q algo assim acontecesse em um projeto maior e q funciona ai no mundo de vdd
@cristianwilliamdev Жыл бұрын
HAhahah boa mano, essa ideia de seguir SOLID faz muito mais sentido, não é mesmo?
@roneikunkel8625 Жыл бұрын
nem uso csharp mas entendi perfeitamente
@cristianwilliamdev Жыл бұрын
csharp
@AlissonBeloti Жыл бұрын
Acredito que continua sem segregação. O correto não seria criar um base para cada operação?
@cristianwilliamdev Жыл бұрын
Cara, na real não tem essa de correto, o que quis dizer no video é que temos que pensar na ideia de Interface Segregation também, criar uma separada daria certo também, mas assim, eu não vejo tanta vantagem assim, ao meu ver, em questão de valor mesmo.
@emersonstori2 жыл бұрын
Ficou a duvida de como adicionar o Unity Of Work neste esquema...
@cristianwilliamdev2 жыл бұрын
Neste caso, voce não mantem o SaveChanges nos métodos do Repo, terá de chamar o savechanges de fora do Repo...
@LucasAlves-vs6te9 ай бұрын
Me tira uma duvida, posso usar esse padão dos dois repository em um unico projeto ou devo sempre usar só apenas um ?
@cristianwilliamdev6 ай бұрын
Cara, isso depende do projeto e da necessidade disso... Lembre sempre de "Keep it simples stupid" KISS
@robinsonrenato2 жыл бұрын
Christian, analisando essa forma de pensar, eu acabei criando uma outra classe qualquer. Como agora eu posso injetar o _repositoryBase, eu fiz essa injeção nessa classe, criei um objeto do tipo usuario e acessei o método de remover normalmente. Ou seja ele continua desprotegido. Será que estou falando bobagem ?
@dan.salviano Жыл бұрын
Também pensei assim. Pensando nesse sentido, não faz sentido todo esse trampo. rsrs
@cristianwilliamdev Жыл бұрын
Vamos dizer que tecnicamente sim, a ideia do Repository base é não usar em classes que não sejam repositories, claro, a ideia do video, é seus repos não expor metodos que não devem ser usados. Hoje em dia eu nem uso mais repos quando tenho o Entity, mas se usa, eu indicaria não usar Generic Repository por causa do problema do video mesmo, eu diria que pensar no Specific Repository Pattern faz mais sentido. Onde voce teria metodos mais especificos, ao inves de um GET generico por exemplo.
@iagofilipe19263 жыл бұрын
Legal, gostei da abordagem, porém acredito que dessa forma desperdiçamos um pouco de espaço instanciando um RepositoryBase pra usar apenas 1 métódo...
@cristianwilliamdev2 жыл бұрын
Se a memória for um problema, voce real tem razão, mas a ideia foi mostrar o pq do modo convencional não ir de acordo com SOLID, tmj mano! Obrigado pelo comentário!
@Leanst. Жыл бұрын
Salve Cristian, bom vídeo, mas vou discordar de que o primeiro modelo do Padrão Repository usando herança fira o ISP, ele não fere se você fizer a sua implementação corretamente. Ao invés de colocar todos os métodos em uma interface e depois ser obrigado a implementá-los, você vai dividir as responsabilidades entre múltiplas interfaces, por exemplo você pode criar algumas interfaces de funcionalidades, por exemplo, IRespositorioUsuarioDelecao, IRespositorioUsuarioArquivar, etc. Com isso, ao herdar a sua classe concreta de Repositório do Usuário, você adiciona as funcionalidades via Interfaces que você quer e pronto, usou a herança lindamente, sem abrir mão das principais funcionalidades e ainda não obrigou a classe a implementar o que não queria. Fica aí a sugestão, abs.
@cristianwilliamdev Жыл бұрын
Opaaa, isso funciona sim e garante o ISP, legal demais a ideia, mas no caso, composição não seria menos trabalhoso? Essa pergunta depende do projeto também, mas vlw demais ai pela exp!
@AlissonBeloti Жыл бұрын
Mudando a Base repository retirando o abstract tb não quebra o Open/Closed?
@OHugoOliveira2 жыл бұрын
Salve Cristian, sabe me dizer se no .Net 5 a classe Entity não existe? Estou tentando usar o where TEntity : Entity mas ele não acha essa classe no System.Data
@cristianwilliamdev2 жыл бұрын
Mano, essa classe foi eu quem criei, ela é só uma classe abstrata com as propriedades padrões que vão em todas as entidades hahaha Verifica o repositório pra ver como fiz
@OHugoOliveira2 жыл бұрын
@@cristianwilliamdev Agora faz sentido hahahahah e o pior que na doc da microsoft existe uma classe com esse nome, o que me bugou ainda mais hahahahah é isso que da pular o vídeo, vlw mano, muito obrigado, baixei o repo aqui e dei uma olhada hahah, mesmo que Entity tenha só o Id lá, sempre que usar o TEntity ele vai usar os dados da classe que eu passei pra ele né?
@cristianwilliamdev2 жыл бұрын
Isso mano, o que fiz foi obrigar que todas as classes que sejam passadas no lugar de TEntity, obrigatoriamente tenha que herdar a classe Entity que criei… Eu fiz isso pra que não fosse possível criar um repo com qualquer classe
@OHugoOliveira2 жыл бұрын
@@cristianwilliamdev Top manoo, muito obrigado Cristian!!!
@cristianwilliamdev2 жыл бұрын
Tmj meu querido! Bons estudos!
@leoteriopancas3 жыл бұрын
Achei seu conteúdo sensacional, mas como fazer quando há dados relacionados?
@cristianwilliamdev3 жыл бұрын
Fala mano! Não entendi muito bem sua dúvida sobre dados relacionados, mas utilizar deste jeito os repositorios, não impede que crie métodos especificos dentro de seu repo além dos CRUDs do repositorio base generico... A ideia principal do repositorio genérico, é não ter que implementar sempre os métodos CRUDs básicos... Espero te ajudado!
@leoteriopancas3 жыл бұрын
@@cristianwilliamdev Entendi, vc tem esse projeto no github?
@cristianwilliamdev3 жыл бұрын
@@leoteriopancas vou subir hoje e volto aqui com o link, sugiro antes de rodar, configurar um banco de dados no appsettings ou se usa docker, posso deixar no readme o comando docker que usei pra rodar o sql server
@leoteriopancas3 жыл бұрын
Sua didática é ótima
@cristianwilliamdev3 жыл бұрын
@@leoteriopancas vlw Brother! Vou até printar isso aqui hahaahha
@DPM-TI--MatheusAnalistadesiste3 жыл бұрын
sabe muito poderiamos fazer uma parceria kkkkkk
@cristianwilliamdev3 жыл бұрын
Só chamar no privado mano, ou lá no Insta @CristianWilliamDev
@gabrielqueiroz77929 ай бұрын
qual o nome da fonte?
@gabrielqueiroz77929 ай бұрын
Operator mono
@lanodecastro2 жыл бұрын
Desculpa meu caro, mas sua justificativa é muito rasa e pretensiosa ao dizer que é a correta. Se deseja usar repository é porque sua aplicação tem aderência aos conceitos do DDD. Se a regra de negócio diz que não vai haver exclusões em uma determinada entidade, então que uma operação de negócio não seja implementada com este objetivo. Um repository nunca deve ser a implementação que orquestrará o fluxo da operação de negócio pretendida. Seu objetivo é fornecer uma abstração de acesso a dados (não somente bancos de dados), de forma de que não crie um acoplamento detalhes de infraestrutura. Uma operação de repository é apenas uma etapa de um fluxo maior. Se assim não for, então a aplicação é mero CRUD e nem precisaria de um repository pra lhe dar com isso, fazendo uso apenas dos ORMs com suas APIs bem projetadas para essas operações mais elementares
@cristianwilliamdev2 жыл бұрын
Obrigado pelos comentários adicionais
@FernandoSilva-yv4bc Жыл бұрын
exato , eu tava a proocura desse comentario kkk, o vídeo resolve um falso problema,
@danieldevfigueiredo Жыл бұрын
Valeu pela reflexão, pô.
@mauraocpt958611 ай бұрын
Isso eu fazia certo sem saber
@cristianwilliamdev11 ай бұрын
Boaaa Maurão, exp é tudo meu irmão ahahah
@mauraocpt958611 ай бұрын
@@cristianwilliamdev , oh brother, trocar o meu nome pode, mas o meu sexo nao 😄😄😄
@cristianwilliamdev11 ай бұрын
Nossa hahahahahahay erro de digitação mano ahahahahha