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(); } } }
@luisalbertoivetta1731 Жыл бұрын
Muy buena explicación.
@ingeniela Жыл бұрын
Muchas gracias 🤗⭐
@gretherestupinanpadron70413 күн бұрын
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.
@javierbullon306410 ай бұрын
Buen video, gracias!
@karinalejandrolugogutierre539510 ай бұрын
Muy buen Video.
@ingeniela10 ай бұрын
A la orden
@penalosacorona925411 ай бұрын
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 ?
@ingeniela11 ай бұрын
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.
@YoungHWN7 ай бұрын
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.
@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
@xancliman7 ай бұрын
hola, dónde puedo encontrar el proyecto completo, si es posible?
@ingeniela7 ай бұрын
Estaré subiendolo pronto a mi repositorio de GitHub: github.com/ingeniela/DetectaLaLogica
@angelriosblancas45157 ай бұрын
Y donde estan los procedimientos almacenados ? ... necesito registrar data en mas de una tabla a la vez
@hermidesmedina6123Ай бұрын
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Ай бұрын
Nop, no es obligatorio
@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.
@cris88159 ай бұрын
Muy buen tutorial, podrias mostrar la interfaz que implementa la clase TicketAppServices ?
@ingeniela9 ай бұрын
// 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); }
@eduardomxm11 ай бұрын
El proyecto como tal, no lo tienes en un repositorio para analizar?
@ingeniela11 ай бұрын
Pronto lo subiré a mi repositorio de GitHub, gracias por la idea ⭐
@gabyg99057 ай бұрын
Me encantó tu explicación. Sin duda se nota to dedicación y trabajo
@zeta_jersson70487 ай бұрын
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?