Я понимаю, что использование подпрограмм доступа к данным непосредственно из кода представления считается злом.Так что у меня есть отдельный проект Repositories
, а также проект Services
.Из того, что я могу сказать, типичное использование сервисного уровня - это изоляция доступа к данным из презентации.Все хорошо.
У меня довольно простой домен, просто класс Movie
.Соответствующий интерфейс репозитория:
public interface IMovieRepository
{
void AddMovie(Movie movie);
void UpdateMovie(Movie movie);
void RemoveMovie(Movie movie);
int GetMovieCount();
Movie GetMovieById(int id);
IEnumerable<Movie> GetAllMovies();
IEnumerable<Movie> GetMoviesByGenre(Genre genre);
IEnumerable<Movie> GetMoviesByYear(int year);
IEnumerable<Movie> GetMoviesByActor(string actor);
IEnumerable<Movie> GetMoviesByTitle(string title);
}
Теперь, когда я добираюсь до класса обслуживания, чтобы использовать репозиторий, я определяю интерфейс, подобный этому:
public interface IMovieService
{
Movie CreateMovie(string title, int year, Genre genre, int length, IEnumerable<string> actors);
void UpdateMovie(Movie movie);
void RemoveMovie(Movie movie);
int GetMovieCount();
Movie GetMovieById(int id);
IEnumerable<Movie> GetAllMovies();
IEnumerable<Movie> GetMoviesByGenre(Genre genre);
IEnumerable<Movie> GetMoviesByYear(int year);
IEnumerable<Movie> GetMoviesByActor(string actor);
IEnumerable<Movie> GetMoviesByTitle(string title);
}
Два интерфейсаочень похоже, что мне кажется страннымЯ ожидаю, что реализация IMovieService
будет использовать реализацию IMovieRepository
внутри, по существу являясь тонкой оболочкой для последней.Вероятно, может быть какое-то подтверждение или кэширование или тому подобное, но первое кажется, что в большинстве случаев оно просто перейдет ко второму.
Правильно ли я поступаю по этому поводу, или есть что-то, что я 'м отсутствует?
Я знаю, что это кажется излишним для такой простой области, но я пытаюсь закрепить схему наслоения и абстракции для использования в будущих и более крупных проектах.
РЕДАКТИРОВАТЬ: чтобы быть немного яснее, я не говорю о NHibernate или шаблон хранилища, а скорее о распределении проблем.
ОБНОВЛЕНИЕ: спасибо, ребята.Я полагаю, что я оставлю конкретные методы запросов в классе обслуживания, которые будут простыми для уровня пользовательского интерфейса, и попытаюсь обобщить некоторые из репозиториев, передав запросы в функцию запроса.