Repository Design Pattern | Full Explanation: C# and .NET

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 พ.ย. 2024

ความคิดเห็น • 31

  • @ingeniela
    @ingeniela  ปีที่แล้ว +5

    Código completo del Repository Design Pattern para C# y .NET:
    // Interfaz del repositorio
    public interface IRepository where TEntity : class
    {
    Task GetAllAsync();
    Task GetByIdAsync(TId id);
    Task AddAsync(TEntity entity);
    Task UpdateAsync(TEntity entity);
    Task DeleteAsync(TId id);
    }
    // Implementación del repositorio
    public class Repository : IRepository where TEntity : class
    {
    protected readonly DatabaseContext _context;
    public Repository(DatabaseContext context)
    {
    _context = context ?? throw new ArgumentNullException(nameof(context));
    }
    public virtual async Task GetAllAsync()
    {
    try
    {
    return await _context.Set().ToListAsync();
    }
    catch (Exception ex)
    {
    throw new Exception($"Couldn't retrieve entities: {ex.Message}");
    }
    }
    public virtual async Task GetByIdAsync(TId id)
    {
    try
    {
    return await _context.FindAsync(id);
    }
    catch (Exception ex)
    {
    throw new Exception($"Couldn't retrieve the entity with id {id}: {ex.Message}");
    }
    }
    public virtual async Task AddAsync(TEntity entity)
    {
    if (entity == null)
    {
    throw new ArgumentNullException(nameof(entity), "Entity must not be null");
    }
    try
    {
    await _context.AddAsync(entity);
    await _context.SaveChangesAsync();
    return entity;
    }
    catch (DbUpdateException ex)
    {
    throw new Exception($"Error saving entity: {ex.InnerException?.Message ?? ex.Message}");
    }
    }
    public virtual async Task UpdateAsync(TEntity entity)
    {
    if (entity == null)
    {
    throw new ArgumentNullException(nameof(entity), "Entity must not be null");
    }
    try
    {
    _context.Update(entity);
    await _context.SaveChangesAsync();
    return entity;
    }
    catch (DbUpdateException ex)
    {
    throw new Exception($"Error updating entity: {ex.InnerException?.Message ?? ex.Message}");
    }
    }
    public virtual async Task DeleteAsync(TId id)
    {
    var entity = await GetByIdAsync(id);
    if (entity != null)
    {
    _context.Remove(entity);
    await _context.SaveChangesAsync();
    }
    }
    }

  • @gretherestupinanpadron704
    @gretherestupinanpadron704 หลายเดือนก่อน +1

    Acabo de entender en 15 minutos con 27 lo que con un profesor no pude en todo un semestre jj.Muchísimas gracias Ingeniela,te apoyo desde Cuba.

  • @gabyg9905
    @gabyg9905 9 หลายเดือนก่อน

    Me encantó tu explicación. Sin duda se nota to dedicación y trabajo

  • @luisalbertoivetta1731
    @luisalbertoivetta1731 ปีที่แล้ว +2

    Muy buena explicación.

    • @ingeniela
      @ingeniela  ปีที่แล้ว

      Muchas gracias 🤗⭐

  • @eduardofuentes8673
    @eduardofuentes8673 ปีที่แล้ว +3

    Hola , antes que nada muchísimas gracias por la explicación es super buena , queda muy claro de manera rápida y sencilla , mi pregunta es si este patrón de diseño es como si tuvieramos una arquitectura en 3 capas pero utilizando los principios SOLID ?

    • @ingeniela
      @ingeniela  ปีที่แล้ว +1

      Sip, ya que el patrón de diseño de repositorio tiene una capa de aplicación y otra de datos, es similar a una arquitectura en tres capas que utiliza los principios SOLID.

  • @cris8815
    @cris8815 11 หลายเดือนก่อน +1

    Muy buen tutorial, podrias mostrar la interfaz que implementa la clase TicketAppServices ?

    • @ingeniela
      @ingeniela  11 หลายเดือนก่อน

      // Interfaz del repositorio
      public interface IRepository where TEntity : class
      {
      Task GetAllAsync();
      Task GetByIdAsync(TId id);
      Task AddAsync(TEntity entity);
      Task UpdateAsync(TEntity entity);
      Task DeleteAsync(TId id);
      }

  • @javierbullon3064
    @javierbullon3064 11 หลายเดือนก่อน

    Buen video, gracias!

  • @eliassilva7228
    @eliassilva7228 4 หลายเดือนก่อน

    Excelente video..

  • @ismaelpereyra176
    @ismaelpereyra176 11 หลายเดือนก่อน

    Gracias! ahora lo tengo mas claro 💟

    • @ingeniela
      @ingeniela  11 หลายเดือนก่อน

      Muchísimas gracias!

  • @karinalejandrolugogutierre5395
    @karinalejandrolugogutierre5395 ปีที่แล้ว

    Muy buen Video.

  • @penalosacorona9254
    @penalosacorona9254 ปีที่แล้ว +1

    Super, que buen video, me queda una duda. Las validaciones, tipos de campos, validar la integridad de la información, validar los campos obligatorios, eso se hace en la capa app service ?

    • @ingeniela
      @ingeniela  ปีที่แล้ว

      Si, en general en la capa de AppService puedes colocar las validaciones para que antes de entrar a la capa de Repository, se compruebe que son datos válidos.

  • @zeta_jersson7048
    @zeta_jersson7048 8 หลายเดือนก่อน

    muy buen videa, se te agradece por compartir tus conocimientos, tengo una dura, MVC es un patron de diseño o un patron de arquitectura?

    • @ingeniela
      @ingeniela  8 หลายเดือนก่อน

      Se puede decir que es ambos

  • @YoungHWN
    @YoungHWN 8 หลายเดือนก่อน

    Que duro!

  • @hermidesmedina6123
    @hermidesmedina6123 3 หลายเดือนก่อน

    Mi pregunta es la siguiente es obligatorio utilizar repository en los nombres? o solo lo utilizas en los ejemplos, disculpa mi ignorancia por favor solo necesito verificar si es estado utilizando mal repository

    • @ingeniela
      @ingeniela  3 หลายเดือนก่อน

      Nop, no es obligatorio

  • @MAvMax22
    @MAvMax22 ปีที่แล้ว +1

    Un par de preguntas. Tu logica de aplicación debe ir en la clase TicketAppService? es decir, supongamos que ademas de guardar el ticket actualizas otra tabla y haces validaciones sobre informacion de otras tablas (como parte del proceso), eso se haria en esa clase? y tu clase TicketsController solo expone los metodos de TicketAppService?

    • @ingeniela
      @ingeniela  ปีที่แล้ว

      Si, estás en lo correcto. En el AppService se colocan las validaciones importantes para las entidades y luego en el Controller se exponen los métodos del AppService.

  • @eduardomxm
    @eduardomxm ปีที่แล้ว +1

    El proyecto como tal, no lo tienes en un repositorio para analizar?

    • @ingeniela
      @ingeniela  ปีที่แล้ว +1

      Pronto lo subiré a mi repositorio de GitHub, gracias por la idea ⭐

  • @FoxStrayer
    @FoxStrayer ปีที่แล้ว +1

    Disculpa-...que significa la palabra Where en la zona donde se encuentra la interfaz???

    • @ingeniela
      @ingeniela  ปีที่แล้ว

      Si te refieres a lo del "IRepository where TEntity : class", el where es una palabra clave para definir el tipo de parametro "TEntity" lo que significa que los métodos de IRepository deben poder instanciar y manipular objetos del tipo TEntity

  • @xancliman
    @xancliman 8 หลายเดือนก่อน

    hola, dónde puedo encontrar el proyecto completo, si es posible?

    • @ingeniela
      @ingeniela  8 หลายเดือนก่อน

      Estaré subiendolo pronto a mi repositorio de GitHub: github.com/ingeniela/DetectaLaLogica

  • @angelriosblancas4515
    @angelriosblancas4515 8 หลายเดือนก่อน

    Y donde estan los procedimientos almacenados ? ... necesito registrar data en mas de una tabla a la vez