我有一个Silverlight Windows Phone 7应用程序,可以从公共API中提取数据。我发现自己一遍又一遍地做同样的事情:
向用户显示的内容可以直接从数据源(例如ObservableCollection
)获取,也可以是对数据源的查询。
我想把这个重复的过程分解成一个框架,理想情况下只需要指定以下内容:
听起来可能很多,但是两个字符串,三个FrameworkElement
和两个方法比我目前的开销要少。
此外,这需要工作,但数据是在内存中维护的,并且需要在这些集合上直接收集和查询。
我的问题是:
这样的事情已经实施了吗?
我对上述话题的看法在某种程度上是根本错误的吗?
这是我想到的设计:
有两个组件,一个是视图和一个模型。
View为FrameworkElement
提供加载,失败和成功。它还给出了相应模型的参考。视图是UserControl
,位于UI的某个位置。
Model是一个给出数据URI的类,一个如何解析数据的方法,以及一个文件名和如何解析文件的方法。它负责检索数据并在当前状态(加载/失败/成功)发生变化时通知View。如果从网络下载的数据与缓存不同,则网络数据优先。当应用关闭或被逻辑删除时,模型会将数据写入缓存。
听起来如何?
答案 0 :(得分:4)
我花了一些时间仔细阅读您的要求,并注意到一些想法作为发声板。
首先,对于具有共同行为的重复性任务,这绝对是接近它的方法。你并不是唯一一个想到这个问题的人。
做一堆这类事情的人可能已经创建了类似的抽象,但据我所知,没有人公开发布。
如果你想要它只是为了你自己的使用和那些有非常相似要求的人,或者你是否想要处理更多的一般情况并制作一个可供广大受众使用的产品,那么你可以在多大程度上取决于它
我将假设前者,但这并不排除将其作为可以进一步开发和/或分叉的开源项目发布的可能性。
通过不尝试满足所有可能性,您可以对使用实现的性质以及特别是UI设计选择做出某些假设。
我认为你的思维方向正确。在阅读您的一些高级想法时,我认为有些事情可以简化(一件好事),同时提供一个强大的用户界面。
关于你的初步观点。
关于你的潜在投入。
关于实施。
希望这会给你一些思考的东西,并且有些保证你会走上正确的道路。有很多方法可以解决这个问题。哪条路最终将由您的目标驱动。
答案 1 :(得分:2)
我正在开发一个WP7应用程序,它基本上是现有REST API的客户端。服务器以JSON格式返回数据。在JSON.NET库(http://json.codeplex.com/)的帮助下,我能够将它直接反序列化为我的.NET C#类。
我在本地存储数据以处理我的应用程序的离线情况,并且每次用户启动应用程序时也阻止在服务器上进行调用。我提供了两种刷新数据的方法:手动和/或一段时间后。为了存储我使用Sertling(http://sterling.codeplex.com/)的数据,它是一个简单但易于使用的Silverlight / WP7本地数据库。
最大的挑战是处理与服务器的异步通信。我提供清晰的UI反馈(Progressbar和/或加载轮),让用户了解正在发生的事情。
另一方面,我正在使用MVVM Light工具包和SL单元测试来进行集成测试View Model =>我的本地客户代码=>服务器。 (http://code.google.com/p/nunit-silverlight/wiki/NunitTestsWp7)