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(); } } }
@gretherestupinanpadron7044 ай бұрын
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.
@gabyg990511 ай бұрын
Me encantó tu explicación. Sin duda se nota to dedicación y trabajo
@luisalbertoivetta1731 Жыл бұрын
Muy buena explicación.
@ingeniela Жыл бұрын
Muchas gracias 🤗⭐
@ismaelpereyra176 Жыл бұрын
Gracias! ahora lo tengo mas claro 💟
@ingeniela Жыл бұрын
Muchísimas gracias!
@javierbullon3064 Жыл бұрын
Buen video, gracias!
@karinalejandrolugogutierre5395 Жыл бұрын
Muy buen Video.
@ingeniela Жыл бұрын
A la orden
@eliassilva72287 ай бұрын
Excelente video..
@reneecode2 ай бұрын
Hola, qué debería estudiar antes de aprender esto?, porque me gustaría aprender este patrón de diseño
@eduardofuentes8673 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
Muy buen tutorial, podrias mostrar la interfaz que implementa la clase TicketAppServices ?
@ingeniela Жыл бұрын
// 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); }
@penalosacorona9254 Жыл бұрын
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 Жыл бұрын
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.
@hermidesmedina61236 ай бұрын
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
@ingeniela6 ай бұрын
Nop, no es obligatorio
@YoungHWN11 ай бұрын
Que duro!
@MAvMax22 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
El proyecto como tal, no lo tienes en un repositorio para analizar?
@ingeniela Жыл бұрын
Pronto lo subiré a mi repositorio de GitHub, gracias por la idea ⭐
@zeta_jersson704811 ай бұрын
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?
@ingeniela11 ай бұрын
Se puede decir que es ambos
@FoxStrayer Жыл бұрын
Disculpa-...que significa la palabra Where en la zona donde se encuentra la interfaz???
@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
@xancliman11 ай бұрын
hola, dónde puedo encontrar el proyecto completo, si es posible?
@ingeniela11 ай бұрын
Estaré subiendolo pronto a mi repositorio de GitHub: github.com/ingeniela/DetectaLaLogica
@angelriosblancas451511 ай бұрын
Y donde estan los procedimientos almacenados ? ... necesito registrar data en mas de una tabla a la vez