Repository Pattern

This pattern is for separating business code from data access. It provides separation of concerns and better testability.

Sample generic repository interface can look like this:

public interface IRepository
{
	IQueryable Find(Expression<Func> predicate);
	void Add(T entity);
	void Remove(T entity);
}