使用 Raven DB 的数据访问体系结构
本文关键字:访问 体系结构 数据 Raven DB 使用 | 更新日期: 2023-09-27 17:55:40
有哪些
数据访问架构可用于Raven DB?
基本上,我想通过接口分离持久性,所以我不会将下划线存储暴露给上层。 即我不希望我的域看到来自Raven DB的IDocumentStore或IDocumentSession。
我已经实现了通用存储库模式,这似乎有效。但是,我不确定这是否真的是正确的方法。也许我会走向命令-查询分离或其他什么?
你有什么想法?
就个人而言,我对命令模式并不真正有经验。我看到它在Rob Ashton的优秀教程中使用。
就我自己而言,我将尝试使用以下方法:-
- 存储库模式(如您所做的那样)
- 使用结构图进行依赖注入
- 模拟测试的最小起订量
- 用于隔离业务逻辑的服务层(不确定这里的模式......或者即使这是一种模式。
因此,当我希望从RavenDB(持久性源)获取任何数据时,我将使用服务,然后它将调用相应的存储库。这样,我就不会将存储库暴露给应用程序,存储库也不是很重或很复杂 ->它基本上是一个 FindAll/保存/删除。
例如。
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!
你想通过它实现什么?
你不能构建一个同时使用RDBMS和DocDB的应用程序,至少效率不高。您必须自己决定要使用哪个数据库,然后一直使用它。如果你决定使用RDMBS,你可以使用NHibernate,然后再使用一次 - 不需要任何其他抽象层。