2013-06-24 32 views
2

我们的项目最近使用官方10gen驱动程序从SQL数据库迁移到noSQL数据库(mogoDB)。项目基于使用Prism框架的MVVM。C#MongoDB仓库架构

我们正在使用通用存储库 - 每个集合的存储库。

又来了几个问题:

  1. 应该repistory只包含基本的CRUD操作,或可 有更具体的操作,例如对某些特定的值取基于 用户。

  2. 对于绑定的目的,我们需要某种自动映射, 的问题是,应该在哪一层完成?例如:'Book' 具有'AuthorId',但在View/ViewModel中,我们绑定到 'Book.Author.name'('Author'而不是'AuthorId'当然会被取消映射 属性。

  3. 从另一个通用 知识库访问某个知识库是不是很好的做法?它们是否应该彼此可见?

+0

你是如何回答这些问题的基于SQL的实现?它不一定需要有所不同。有很多方法可以做到这一点,答案会有很大的变化。 – WiredPrairie

+0

另外 - 你可能会发现你的数据结构需要重新考虑。例如'Book.Author.Name'可能需要额外的查询。您需要更复杂的“自动映射器”来处理这些类型的请求。 – WiredPrairie

+0

@WiredPrairie - 在SQL实现中,存储库包含“使用模式”(由于使用dbcontext)和“更高级别”的数据访问操作(不仅是纯粹的CRUD)。现在没有上下文。我不确定存储库的最佳实践是什么,是否公开收集并仅提供CRUD操作,或者保持收集私有并提供更多的CRUD操作(一些查询方法)。 – yurislav

回答

0

所以最后,我们决定使用以下方法:

  1. 通用库(每收集区)包含基本的CRUD操作和基于一些特定的值越来越实体的简单方法 - 严格的数据访问方法。

  2. ViewModel图层确实提供了“完成”未映射的属性,而不是存储库层。

  3. 因此,不需要存储库之间的交叉引用。