我读了一些书在创建无国籍的网站,我读过一些关于客户端状态的应用程序,但一个很大的复杂性来时你必须把两者结合起来。我们有一个Flex的应用程序,需要保持数据的数据库。网服务。要记住的事情是:-并发(乐观/悲观的) -性能:Flex需要载于大量的数据这么懒装往往是必要的。-你使用也可与检的转院之间的数据服务器和客户?

我会告诉你的历史,我们的产品。我们已经使用的亚音速从一开始作为一个o/r mapper。亚音速的对象是转换为也可与检的书面通过我们,这些也可与检的是转移给客户。客户方的也可与检的转域模型。如果客户方一领域模型对象的需要保存,这是转换回也可与检和发给的服务器。服务器方也可与检转换为一个亚音象和保存数据库。

现在,前些时候,我们需要的领域模型上。网服务器的侧面...所以现在我们就像三个模型的服务器上面,在亚音速的模式,也可与检模型和领域模型。这也可与检模型是更简单和类似数据库的更多,该领域模型有更多的逻辑。它变得复杂...我们现在必须同步AS3域模型的代码C#域模型的代码。如果我们能再做一次(当得到,时间到"重构"),我认为我们不会使用也可与检的了,但转让领域模型之间的客户和服务器。问题是如果这是现实的。也可与检的简单对象的那么容易传递。领域模型对象可以是非常复杂。

有书籍如何创建一种架构用于这些种类的应用程序?图书编写通过人,有很多经验?你有经验吗?

有帮助吗?

解决方案

现实是,分享物体之间的客户和服务器是非常复杂。这里就是你所需要让它发生这样的情况:

简单的/不可扩展的方式:

继承 所有 你的对象 MarshalByrefObject.如果你创建的对象一个服务器上,并将它发送给客户,任何客户的修改对象将自动转发服务器。

虽然这听起来像是个完美的解决方案,它有两个主要问题:

  1. 客户和服务器是紧密结合。网(再见-再见网页服务)
  2. 它可以是一个性能的噩梦。所有的方法/属性访问将转发服务器。如果你选择这条路,你的对象真的应该被设计成用于矮矮胖胖的话,不是话多的人。

可扩展/难的方式:

而不是使用 MarshalByRefObject, 你会用 DataContract/Serializable 对象。但是:

  • 如果你创造的 的对象了 在服务器上,并将它发送给客户, 客户将收到一个 复制 的对象(让我们叫它 目B)
  • 当你发送 目B 回到服务器、服务器将收到一个 复制 的对象B(让我们叫它 目C)

但是你真正想要的服务来治疗 的对象了目C 尽相同。不幸的是,CLR不能这样做,所以你需要一个 目合并 坐在客户和服务器。

目合并 将包含一个字典的内的所有对象的模型,并知道如何辨认的两个实例为是相同的,并合并的任何价值从收端。例如,如果客户已经有目C中的存储器,并接收更新的副本从服务器,这将复制本价值观。

不幸的是,这也是问题重重,因为需要确保对象引用的保留正确的。你不能只是盲目地更新所有属性的一个目的,因为的对象可以有现有提到其他目的,这反过来可能需要自己的合并。在所有这,你也需要跟踪增加/删除的对象包含在名单或字典。

我加入n层支持我自己的框架,因此我要通过同样的工作吧(我采取"可扩展/难"途径)。幸运的是,我有很多的支持基础设施的地方,以协助识别、合并,等等。如果你是从头开始,这将是一件重要的工作。

P.S.添加懒装代理人进入组合(我使用原则才能享受它的全部好处),这甚至得到 更多 有趣的...

其他提示

去Fowler阅读任何内容,特别是他的设计模式(特别是汇编模式以及你为什么需要你已经在做的事情)

Fowler的企业应用架构模式

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top