我可以使用哪些数据访问体系结构与Raven DB一起使用?
基本上,我想通过接口分离持久性,因此我不会将下划线存储暴露给上层。即我不希望我的域看到来自Raven DB的 IDocumentStore 或 IDocumentSession 。
我已经实现了通用存储库模式,这似乎有效。但是,我不确定这是否是正确的方法。也许我会去命令查询隔离或其他什么?
你有什么想法?
答案 0 :(得分:6)
就个人而言,我对命令模式并不熟悉。我看到它在Rob Ashton's excellent tutorial中使用。
对于我自己,我将尝试使用以下内容: -
因此,当我希望从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<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();
}
}
所以这是一个非常简单和人为的例子,没有错误/验证检查,尝试/捕获等等......它是伪代码..但是你可以看到服务是如何富而存储库(假设至少对我而言)简单或更轻。然后我只通过服务公开任何数据。
这就是我现在使用.NET
和Entity Framework
所做的事情,而我距离RavenDb
只有几个小时的时间(WOOT!)
答案 1 :(得分:2)
你想要实现的目标是什么?
您不能构建一个既使用RDBMS又使用DocDB的应用程序,至少不能有效。您必须自己决定要使用哪个数据库,然后一直使用它。如果您决定使用RDMBS,您可以使用NHibernate,然后再使用 - 不需要任何其他抽象层。