Подтвердить что ты не робот

Архитектуры доступа к данным с Raven DB

Какие архитектуры доступа к данным доступны, которые я могу использовать с Raven DB?

В принципе, я хочу отделить постоянство через интерфейсы, поэтому я не раскрываю underline storage для верхних уровней. То есть Я не хочу, чтобы мой домен видел IDocumentStore или IDocumentSession, которые из Raven DB.

Я реализовал общий шаблон репозитория и, похоже, работает. Однако я не уверен, что на самом деле это правильный подход. Может быть, я перейду к сегрегации запроса команд или чему-то еще?

Каковы ваши мысли?

4b9b3361

Ответ 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!)

Ответ 2

Что вы пытаетесь достичь этим?

Вы не можете создать приложение, которое использует как RDBMS, так и DocDB, неэффективно, по крайней мере. Вы должны сами решить, какую базу данных вы собираетесь использовать, а затем пройти весь путь. Если вы решите пойти с RDMBS, вы можете, например, использовать NHibernate, а затем снова - нет необходимости в каком-либо другом уровне абстракции.