La Magia 🧙‍♂️ del Patrón Repositorio en C#

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

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

  • @NetMentor
    @NetMentor  Год назад +6

    Blog: www.netmentor.es/entrada/repository-pattern
    Twitter: twitter.com/NetMentorTW

  • @PabloOlivera-my7wm
    @PabloOlivera-my7wm Месяц назад

    Gracias por el video.
    Una cosa, el patrón repositorio no solamente te permite cambiar la base de datos (improbable como dices), sino tbn la forma de acceder a los datos. Por ej: puedes pasar de EF a Dapper o ADO de forma transparente para quien tiene una dependencia de la interfaz del repositorio.

  • @luiscahuana310
    @luiscahuana310 Год назад +1

    muchas gracias por compartir tu conocimiento, podrías hacer algún vídeo explicando una clase Repository con propiedades genéricas?, es decir el GetAll(), etc, muchas gracias.

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

    Aunque ya es opinión de cada uno, pero para mi EF Core es la abstracción que yo llegaría a necesitar si es que ocurre ese lejano suceso de cambiar de base de datos, ya que EF Core tiene muchos providers (de los populares y relacionales) en el cual, aunque no fuera tan automático, puedo cambiar la base de datos sin problema.
    Para el testing ocurre lo mismo, si es unit testing y no importa la BD, podemos usar una base de datos en memoria, para integration tests, podríamos usar SQL Local DB.
    Repository pattern y unit of work para mi suele ser mucha ceremonia, y para mi punto de vista, poco beneficio. Tal vez me gusta hacer las cosas "sucias" jaja
    Soy fan tuyo, gracias por todos tus vids y contenido!! 👍🏻👍🏻

    •  Год назад

      Concuerdo totalmente.

    • @iturraldec
      @iturraldec 9 месяцев назад

      idem!

  • @wineloy
    @wineloy Год назад +1

    Hola buen video!
    Yo en su momento lo intente aplicar de esta forma, pero usaba dapper como ORM/Mapeador pero cuando se tenian ya como 10-20 entidades, se me hacia muy complicado la gestion de las interfaces y/o interfaces especificas para cada caso o consulta individual, al final termine optando por una interfaz generica con las operaciones insert/update/select y una clase abstracta donde basicamente a punta de reflection construyo sql generico y al vuelo
    AL final se encapsula en una clase contenedora y puedo hacer metodos para consultas complejas

  • @laamenazard
    @laamenazard Год назад +1

    cuando implementes el Unit Work haslo con un ejemplo una transacion guardando en dos tablas que creo que ese es el objetivo del Unit Work todo o nada, gracias por tus videos.

    • @NetMentor
      @NetMentor  Год назад +2

      En el siguiente vídeo el martes lo tendrás así 😉

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

    Hola felicitacione por tu video, muy bueno.
    Puedes por favor decirme o si tienes ejemplos mucho mejor, cuando usar el Patron Repository y cuando usar el Mediator?
    Agradezco tu orientacion.

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

      son dos patrones diferentes, no es uno o el otro. utiliza mediator cuando lo necesites y repository pattern pues lo mismo.

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

    shhh que buena explicacion

  • @nahuelalvez8042
    @nahuelalvez8042 8 месяцев назад

    Yo estoy un poco confundido. Estoy trabajando con Dapper y Stored Procedures. Para mi me alcanza para el crud el repository, pero ¿Qué pasa el método buscar, por dar un ejemplo? ¿Ese lo pongo en el repository? ¿O lo tengo que trasladar a otra capa? Yo me encontré con que los Stored Procedures me resuelven bastantes cuestiones de lógica. Agradecería mucho una devolución jaja. ¡Mil gracias por tus videos y saludos desde Argentina!

    • @NetMentor
      @NetMentor  8 месяцев назад +1

      si tienes la lógica en Store procedures al final la capa de datos es simplemetne un proxy a la bbdd, no vas a tener ni tablas ni nada en el repository.
      simplemente pon detrás de los metodos del repository la llamada al SP en vez de a las tablas y ya.

  • @guidodelzotto6562
    @guidodelzotto6562 3 месяца назад

    Capo total

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

    hola! una duda, en vez de hacer un repositorio por cada entidad no sería mejor hacer uno generico que trabaje con tipos genericos?

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

      El curso no está terminado 😉 creo que en dos o tres semanas pondré ese vídeo (el post ya está en la web si lo quieres ir a ver )

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

    Si tuviera un api que muestra información de usuarios y sus productos, se debe crear un repository para usuarios y otro para productos?

    • @NetMentor
      @NetMentor  Год назад +1

      En principio no, me explico. Si los usuairos tienen productos al nivel carro de la compra(en plan 5 o 10 productos) es complicarse de más, cuando simplemente puedes devlover toda la información haciendo el include.
      En cambio si un usuario es una tienda dentro de Amazon, donde puedes tener miles de productos si ya que son dos entidades muy grandes, en mi opinión claro.

  • @leonardoHer
    @leonardoHer 3 месяца назад

    Hola, hablando de repositorios. ¿Cómo organizarías los repositorios si tienes por un lado Clientes y por otro lado requieres consultar las ventas de un cliente o el estado de cuentas del mismo? ¿Harías un repositorio a parte del repositorio de clientes para obtener las ventas y estados de cuentas o las ventas y estados de cuenta serían métodos del repositorio del cliente?

    • @NetMentor
      @NetMentor  3 месяца назад +1

      entiendo que en un monolito, si es un monolito personalmente preferiría multiples repositorios. Aunque va a ser mucho menos trabajo tenerlo solo un repositorio por base de datos.

    • @leonardoHer
      @leonardoHer 3 месяца назад

      @@NetMentor muchas gracias por tu respuesta. No sé a que te refieres con el termino "monolito" pero entendí la idea. Lo que sí es verdad que obteniendo ese tipo de información te sales del CRUD de Clientes, para generar el estado de cuentas tienes que examinar las ventas al clientes y los pagos que el mismo ha realizado. Quizás vaga la pena un repositorio aparte, pese que a nivel de clases posiblemente la clase cliente tenga un método Cliente.EstadoDeCuentas(...)

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

    Te tengo en alta estima como ejemplo a seguir. Me gustaría que expusieras un ejemplo de organización cuando en una solución se tienen que utilizar varias bases de datos, con múltiples modelos distintos, viewmodels, etc.
    Me gustaría ver un vídeo de cómo organizar las dll's de los proyectos muy grandes. Es mejor tener un único proyecto con todos los modelos o distintos proyectos con modelos por contexto de negocio.
    Cómo aconsejas realizar las llamadas desde un servicio, Service1, que tiene inyectada la capa de repositorio, IRepository1, y necesita obtener datos del repositorio, IRepository2.
    ¿Recomiendas inyectar el servicio que tiene inyectado IRepository2 o mejor inyectar la capa IRepository2 en Service1?
    Estoy en la fase de reorganizar un proyecto enorme con deoendencias circulares, mal uso de IoC, definición de clases anidadas, paso de Interfaces e implementaciones en el constructor, etc.

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

      Muchas gracias por tu conocimiento, esfuerzo y trabajo. Espero algún día estar a tu nivel.
      Un saludo enorme

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

      es un poco dificil de saber sin ver el código, pero si el servicio simplemente hace un crud simple, sin lógica de negocio, puedes insertar el repositotrio, aunque no sería lo ideal (ya que siempre hay algo de lógica de negocio)
      Luego en un monolito muy grande, lo que yo recomiendo primero es convertirlo a un monolito modular, donde los boundaries están bien identificados y no se traspasan y de ahí intentar mejorar, pero ese es el primer paso siempre, porque si no, veo imposible un refactor.
      un saludo

  • @CeleChaudary
    @CeleChaudary Год назад +3

    Uso este patrón en mi compañía, sin embargo no soy tan fan. Se pierde mucho el poder de EF ya que no siempre basta con los métodos Add, Update, Remove, Get... sí, al final terminas haciendo otros métodos que básicamente hacen lo mismo que ya hacen los de EF...

    • @elrincondeada.canaldeprogr2392
      @elrincondeada.canaldeprogr2392 Год назад +2

      Estoy totalmente de acuerdo a mi me sobra la capa del patrón repository perdemos la versatilidad del dbcontext. He visto servicios a los que se inyectan 20 repositorios complicando la lógica mucho. La implementación de ese mismo servicio se simplifica usando directamente el dbcontext. Luego ese servicio se inyecta en los controladores. El uso de dbcontext no creo que sea usar directamente la base de datos que abstrae. El dbcontext se puede hacer independiente de la base de datos relacional y hacer tests. Luego esta el horror de hacer entidades muy diferentes en muchas capas y mapeos que se realizan sin conocer como funciona en tracking de los estados de las entidades que llegan al contexto de entity framework

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

    Este patrón es lo que se llama Unit of Work?

    • @NetMentor
      @NetMentor  Год назад +1

      nope, ese lo veremos en el siguiente vídeo, aunque se podría decir que estan relacionados, bueno en la mayoría de códigos "van a ir juntos"

  • @AndderManValdez
    @AndderManValdez 9 месяцев назад

    Cómo se llama tu IDE?

    • @NetMentor
      @NetMentor  9 месяцев назад

      jetbrains rider

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

    muchas gracias por compartir tu conocimiento, podrías hacer algún vídeo explicando una clase Repository con propiedades genéricas?, es decir el GetAll(), etc, muchas gracias.

    • @NetMentor
      @NetMentor  Год назад +3

      no iba a hacer algo así, pero es buena idea asi que seguramente si que haga algo así, eso sí, seguramente sea al final del curso, así que habra 4 o 5 vídeos antes que ese, pero en principio si haré algo.
      Un saludo!

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

      @@NetMentor sería genial, porque creo que un repositorio genérico con algunos métodos nos podría ahorrar unos cuantos métodos que se repiten, muchas gracias de antemano, siempre te sigo.