我希望在一个小项目中使用 IRepository 模式(由 NHibernate 支持,如果重要的话)。该域是一个简单的域,有意让我专注于理解 IRepository 模式。唯一的域类是Movie
,具有Year
、Genre
和的属性Title
。我的意图是“获取”其属性符合上述类型标准的电影。
约定似乎是有一个通用IRepository
接口,类似于以下:
public interface IRepository<T>
{
T Get(int id);
T[] GetAll();
void Add(T item);
void Update(T item);
void Delete(T item);
}
使用基本实现:
public abstract class Repository<T> : IRepository<T>
{
public T Get(int id) { ... }
public T[] GetAll() { ... }
public void Add(T item) { ... }
public void Update(T item) { ... }
public void Delete(T item) { ... }
}
然后要有一个特定于域的接口:
public interface IMovieRepository
{
Movie[] GetByGenre(Genre genre);
Movie[] GetByYear(int year);
Movie[] GetByTitle(string title);
}
使用还扩展基Repository
类的实现:
public class MovieRepository : Repository<Movie>, IMovieRepository
{
public Movie[] GetByGenre(Genre genre) { ... }
public Movie[] GetByYear(int year) { ... }
public Movie[] GetByTitle(string title) { ... }
}
我需要使用 NHibernate 为基类和具体的实现添加必要的实现,但我想知道我是否在正确的轨道上使用此设置。
似乎只有一个域类会产生相当多的开销,但如果涉及多个域类,则不会那么明显。现在我正在努力保持简单,以便我可以确定这个概念。