2

背景

我需要使用 .NET 构建富客户端应用程序。该应用程序需要处理具有大约 100000 个实体的 TreeViewControls 和 TableViewControls。GUI 是使用 WPF 构建的,很可能使用 Telerik Controls。我的问题是关于数据层的一般架构。我对这些概念有一些粗略的想法,但非常感谢您的评论/想法和提示,我应该深入挖掘哪些技术。以下是我的想法:

概念层

表示层

只是 WPF 控件,我需要对属性更改的不同控件进行高性能同步,但我预计这里不会出现重大问题。

业务层

创建视图(要在控件中显示的对象选择)、CRUD 操作(直接使用 POCO 进行的修改)、搜索(全局搜索,但也仅限于视图)

存储库

在实体地图中保存 POCO,决定从持久性存储中加载的天气

持久性管理器

我正在考虑使用 LocalDB 或简单的键值存储作为(持久)客户端缓存。因此,Persistence-Manager 会尝试从本地存储中获取对象。否则从服务器获取数据。此外,将数据持久化到客户端缓存。数据将通过网络服务提供。我很高兴尝试 WCF 数据服务。

持久层

有两个部分: - 使用像 EF 或 OpenAccess 这样的 ORM 的本地数据库连接;或一个简单的键值存储 - 使用 Web 服务的 HTTP 连接

问题

  • 在这样的分层中,延迟加载引用的对象怎么样?我知道 EF 和其他 ORM 也解决了我在这里遇到的很多问题。但是我还没有看到如何将这些框架插入到上面的分层中。另外,在哪里跟踪更改?删除对象时在哪里确保一致性?(例如删除对这些对象的引用)
  • 我渴望加载整个视图(分层结构)并对那些 POCO 集合的对象执行 Linq。如果 Linq 性能成为问题,也许可以实现一个简单的倒排索引。但是我应该如何最好地在服务器上实现全局搜索?是否有可用的库(“Linq to OData”)?
  • 您如何看待完全“断开连接”的场景?将用户需要的所有数据保存在本地数据库中。在启动/停止和用户触发时同步。我可以直接在本地数据库上使用 ORM,这很有可能避免很多尝试手动实现许多一致性功能的麻烦(使用上面的分层)。
  • 或者相反,忘记本地数据库并批量加载大部分需要的数据。在这里,我关心的是 web 服务的性能(没有使用 OData、WCF 的经验)。我已经使用 Redis 和 Python 构建了一个应用程序,它可以非常快(< 1 分钟)将大约 200000 个业务对象加载到客户端(对象已经序列化缓存在 Redis 中)。

我当然会做一些原型设计和基准测试,但是为了有个好的开始,任何想法和建议都非常感谢。

干杯,

4

0 回答 0