使用Raven DB的数据访问体系结构

我可以使用哪些数据访问体系结构与Raven DB一起使用?

基本上,我想通过接口分离持久性,所以我不会将下划线存储暴露给上层。 即我不希望我的域看到来自Raven DB的IDocumentStoreIDocumentSession

我已经实现了通用存储库模式,这似乎有效。 但是,我不确定这是否是正确的方法。 也许我会去命令查询隔离或其他什么?

你的想法是什么?

就个人而言,我对命令模式并不熟悉。 我看到它被用在Rob Ashton的优秀教程中 。

对于我自己,我将尝试使用以下内容: –

  • 存储库模式(正如您所做)
  • 使用StructureMap进行dependency injection
  • Moq用于模拟测试
  • 用于隔离业务逻辑的服务层(不确定此处的模式……或者即使这是一种模式。

因此,当我希望从RavenDB(持久性源)获取任何数据时,我将使用Services,然后将调用相应的存储库。 这样,我不会将存储库暴露给应用程序,也不会使存储库非常繁重或复杂 – >它基本上是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 userRepository, ILoggingService loggingService) { Repository = userRepository; LoggingService = loggingService; } public IEnumberable FindWithIsActive(int page, int count) { // Note: Repository.Find() returns an IQueryable 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(); } } 

所以这是一个非常简单和人为的例子,没有错误/validation检查,try / catch等等……它是伪代码..但你可以看到服务器是如何丰富而存储库是(假设是,为我至少) 简单轻松 。 然后我只通过服务公开任何数据。

这就是我现在使用.NETEntity Framework做的事情,而且我真的需要几个小时才能完成RavenDbRavenDb !)

那你想要实现什么目标?

您不能构建一个既使用RDBMS又使用DocDB的应用程序,至少不能有效。 您必须自己决定要使用哪个数据库,然后一直使用它。 如果您决定使用RDMBS,可以使用NHibernate,然后再使用 – 不需要任何其他抽象层。