Лично я не очень разбираюсь в шаблонах команд. Я видел, что это использовалось в превосходном учебнике Роба Эштона .
Для себя я попытаюсь использовать следующее: -
- Шаблон репозитория (как вы сделали)
- Внедрение зависимостей с 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 и т. Д. ... и псевдокода ... но вы можете увидеть, как сервисы rich , пока хранилище (предположительно, по крайней мере для меня) просто или легче . И тогда я только выставляю любые данные через сервисы.
Это то, что я делаю прямо сейчас с .NET
и Entity Framework
, и я буквально через несколько часов могу сделать это с RavenDb
(WOOT!)