有状态客户端中的对象完整性和缓存

时间:2009-03-14 22:59:24

标签: flex silverlight caching object

我想知道在有状态的客户端(如Flex或Silverlight应用程序)中处理对象完整性的策略是什么。

我的意思如下:考虑一个拥有集团和成员实体的应用程序。组包含多个成员,成员可以属于多个组。视图列出了延迟加载的不同组(最初没有成员)。在请求组的详细信息时,所有成员都被加载和缓存,以便下次我们不需要调用服务来获取组的详细信息和成员。

现在,当我们请求另一个组的详细信息与已加载的组的成员相同时,我们是否会关注该成员已经在内存中的事实?

如果我们不这样做,当编辑成员(在第一组中引用)并且更改未应用于其他成员实例时,我可以看到潜在的数据冲突。因此,为了解决这个问题,我们可以检查已经加载的成员的服务调用结果(获取组详细信息),然后用缓存的成员替换加载的那些。

要分享的任何提示,想法或经验吗?

2 个答案:

答案 0 :(得分:1)

您所描述的内容通常由“第一级缓存”解决(在Hibernate中,“Session”;在JPA中,“EntityManager”),它确保只存在特定实体的一个实例。一个特定的背景。正如您所建议的那样,这可以应用于从服务器获取的对象,以确保对特定实体的所有引用实际上都是对同一对象实例的引用。您还需要一种机制来确保在AVM中创建的实体存在于同一上下文中,因此它们具有应用于它们的类似逻辑。

Granite Data Services项目有一个名为“Tide”的项目,旨在解决这个问题:

http://www.graniteds.org/confluence/display/DOC/6.+Tide+Data+Framework

就DDD而言,重要的是不要将后端设计为简单的数据访问API,例如简单地公开一组DAO或存储库。客户端应用程序不可信,实际上很容易使用Charles等调试代理进行操作。我总是设计一个针对UI定制的服务API(以便可以在一次调用中获取屏幕数据),并且通常使用注释和Spring AOP来强制执行必要的安全性或验证逻辑。

答案 1 :(得分:0)

我要做的是创建一个客户端应用程序服务,它执行数据请求的缓存和服务。这将处理对象是否已存在于缓存中。如果您正在使用DDD,那么您需要决定什么是您的聚合根实体。集团或会员。你不能互相控制。需要有一点来管理加载等。在加拿大ALT.NET OpenSpaces上查看关于DDD的视频。 http://altnetpedia.com/Calgary200808.ashx