Say you have the following entities defined in a LINQ class:
Product
Customer
Category
Should I have one repository class for all:
StoreRepository
... or should I have:
ProductRepository
CustomerRepository
CategoryRepository
What are the pro & cons of each? In my case, I have several "applications" within my solution... the Store application is just one of them.
Here's my point of view. I'm a strict follower of the Repository pattern. There should be 3 methods that take a single entity. Add, Update, Delete, generically defined.
public interface IRepository<T>
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
Beyond those methods, you're dealing with a "Query" or a service method. If I were you, I'd make the repository genrically defined as above, add a "QueryProvider" as shown below and put your business logic where it belongs in either "Services" or in "Commands/Queries" (comes from CQRS, Google it).
public interface IQueryProvider<T>
{
TResult Query<TResult>(Func<IQueryable<T>, TResult> query);
}
(Hope my opinion is somewhat useful :) )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With