小さなプロジェクトで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を使用して、基本クラスと具象クラスに必要な実装を追加する必要がありますが、この設定で正しい方向に進んでいるかどうかを知りたいと思います。
複数のドメインクラスが関係している場合は目立たなくなりますが、1つのドメインクラスだけでかなりのオーバーヘッドがあるようです。今、私はそれをシンプルに保とうとしているので、コンセプトを突き止めることができます。