2011-08-21 112 views
2

这里有一个小问题,我假设特别在RIA的Flex/AS3中弹出ALOT。让我解释一下,让我们假设我们有一个复杂的对象Car。服务对象返回

Car 
{ 
    name:String; 
    creationDate:Date; 
    engineSize:String; 
    pastOwners:Array; 
    maintenenceOperations:Array 
} 

现在让我们说我的申请通过改变它的名字,并将其发送出去的服务更新一个Car对象。我的问题是如何处理对象的返回和更新应用程序端的Car对象。你是否会写出它并为每个班级写下样板文件?你如何处理一个属性是懒惰加载?

在编写样板更新代码之前,我已经完成了它,如果有更好的方法,我只是不想重新发明方形轮。

更新方法的示例的请求被请求,所以在这里。它并不是完整的所有方面,但它捕捉了一个想法,即您拥有一个现有的Car对象,并将新的服务对象传递给它以纠正差异。

[Bindable] 
[RemoteClass("com.stackoverflow.example")] 
public class Car 
{ 
    public var name:String; 
    public var engineSize:String; 
    public var maintenenceOperations:Array; 
    public var owner:Owner; 

    public function update(value:Car):void 
    { 
     if(value != null) 
     { 
      this.name = value.name; 
      this.engineSize = value.engineSize; 
      if(this.owner != null) 
      { 
       this.owner.update(value); 
      } 
     } 
    } 
} 
+0

你可以发布你的样板更新代码的例子吗? – Taurayi

+0

@Taurayi我用更新代码的例子更新了问题。 –

回答

2

保持简单,大部分时间不需要处理发送到要更新的服务的对象的返回。

如果服务在更新对象时修改了对象,则获取结果对象并替换空洞flex对象,而不是检查其属性以进行更改。

+0

谢谢@GustavoFSx我可能必须这样做。这将需要大量的簿记。假设您更新与Car相关的maintenanceOperation。我们现在必须在我们的字典中找到Car对象,并将维护操作替换为返回的操作。我喜欢“保持简单”的方面,有时我会陷入困境,我没有看到树林。 –

+0

我同意 - 使用整个对象是一种保持良好的面向对象设计并减少紧耦合的方法。 – hotshot309

1

简而言之,您需要某种与物体相关的ID(唯一)。当服务器返回时,您可以通过关联数组(Dictionary)查看该对象ID并更新适当的属性。

长答案,它真的取决于你想要完成什么以及如何完成。这个问题有很多答案,但是你要找到哪种方式最适合你的具体情况。

+0

谢谢@J_A_X。我想我可能会去替换整个对象。然后,当我替换对象时,从我的经理中发起“providerChangeEvent”,让模型和演示者知道他们需要刷新。由于它们持有对旧IUID对象的引用,因此它们可以搜索更新的对象并刷新其视图/数据。
通过在我的应用程序中使用合并方法,可以显式避免更新并隐式完成,因为引用将是相同的。 –