Ответ 1
Лично я не очень разбираюсь в Command Pattern. Я видел, что он был использован в Роб Эштоне отличный учебник.
Для себя я попытаюсь использовать следующее: -
- Шаблон хранилища (как вы это сделали)
- Инъекция зависимостей с StructureMap
- Moq для макетирования
- Уровень обслуживания для изоляции бизнес-логики (не уверен в шаблоне здесь.. или даже если это шаблон.
Поэтому, когда я хочу получить какие-либо данные из RavenDB (источник постоянства), я буду использовать Службы, которые затем вызовут соответствующий репозиторий. Таким образом, я не размещаю репозиторий приложения и не очень тяжелый или сложный репозиторий → это в основном FindAll/Save/Delete.
например.
public SomeController(IUserService userService, ILoggingService loggingService)
{
UserService = userService;
LoggingService = loggingService;
}
public ActionMethod Index()
{
// Find all active users, page 1 and 15 records.
var users = UserService.FindWithIsActive(1, 15);
return View(new IndexViewModel(users));
}
public class UserService : IUserService
{
public UserService(IGenericReposistory<User> userRepository,
ILoggingService loggingService)
{
Repository = userRepository;
LoggingService = loggingService;
}
public IEnumberable<User> FindWithIsActive(int page, int count)
{
// Note: Repository.Find() returns an IQueryable<User> in this case.
// Think of it as a SELECT * FROM User table, if it was an RDMBS.
return Repository.Find()
.WithIsActive()
.Skip(page)
.Take(count)
.ToList();
}
}
Итак, очень простой и надуманный пример без проверки ошибок/проверки, try/catch и т.д.... и его псевдокода.. но вы можете видеть, как услуги богаты, а репозиторий (предположим, быть, для меня, по крайней мере) простым или легким. И затем я предоставляю только данные через службы.
То, что я делаю прямо сейчас с .NET
и Entity Framework
, и я буквально в нескольких часах езды от него, RavenDb
(WOOT!)