WPF Rich-Client的数据层架构?

时间:2013-01-13 04:00:30

标签: wpf entity-framework architecture telerik rich-client-platform

背景

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

概念层

表示层

只是WPF控件,我需要对属性更改的不同控件进行高效同步,但我不认为这里存在重大问题。

业务层

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

存储库

将POCO保存在enitity地图中,决定从持久性商店加载天气

持久性 - 管理器

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

持久性层

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

问题

  • 在这样的分层中,延迟加载引用的对象怎么样?我知道EF和其他ORM也会处理我在这里遇到的很多问题。但我还没有看到如何将这些框架插入到上面的分层中。此外,在哪里跟踪变化?删除对象时保证一致性的位置? (例如,删除对这些对象的引用)
  • 我会急切地加载整个视图(层次结构)并将Linq执行到那些POCO集合的对象。如果Linq性能成为一个问题,也许可以实现一个简单的倒排索引。但是我应该如何在服务器上最好地实现全局搜索?是否有库(“Linq to OData”)?
  • 您如何看待完全“双向”的情景?保存用户在本地数据库中需要的所有数据。启动/停止同步和用户触发。我可以直接在本地数据库上使用ORM,很有可能省去很多令人头疼的问题,试图手工实现大量的一致性功能(使用上面的分层)。
  • 或者相比之下,忘记本地数据库和批量急切加载大部分所需数据。在这里,我关注webservices的性能(没有OData,WCF的经验)。我使用Redis和Python构建了一个应用程序,可以非常快速地(<1分钟)向客户端加载大约200000个业务对象(这些对象已经在Redis中缓存了序列化)。

我当然会做一些原型设计和基准测试,但要想有一个良好的开端,任何想法和建议都会受到高度赞赏。

干杯,

0 个答案:

没有答案