KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Context / Question I've worked on numerous .NET projects that have been required to persist data and have usually ended up using a Repository pattern. Does anyone know of a good strategy for removing as much boilerplate code without sacrificing code base scalability? Inheritance Strategy Because so much of the Repository code is boiler plate and needs to be repeated I normally create a base class to cover the basics like exception handling, logging and transaction support as well as a few basic CRUD methods: public abstract class BaseRepository<T> where T : IEntity { protected void ExecuteQuery(Action query) { //Do Transaction Support / Error Handling / Logging query(); } //CRUD Methods: public virtual T GetByID(int id){} public virtual IEnumerable<T> GetAll(int id){} public virtual void Add (T Entity){} public virtual void Update(T Entity){} public virtual void Delete(T Entity){} } So this works well when I have a simple domain, I can quickly create a DRY repository class for each entity. However, this starts to break down when the domain gets more complex. Lets say a new entity is introduced that does not allow updates. I can break up base classes and move the Update method into a different class: public abstract class BaseRepositorySimple<T> where T : IEntity { protected void ExecuteQuery(Action query); public virtual T GetByID(int id){} public virtual IEnumerable<T> GetAll(int id){} public virtual void Add (T entity){} public void Delete(T entity){} } public abstract class BaseRepositoryWithUpdate<T> : BaseRepositorySimple<T> where T : IEntity { public virtual void Update(T entity){} } This solution does not scale well. Let's say I have sever
Tags (comma-separated)
Save Edits
Cancel