2011-08-21 170 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對象的引用,因此它們可以搜索更新的對象並刷新其視圖/數據。
通過在我的應用程序中使用合併方法,可以顯式避免更新並隱式完成,因爲引用將是相同的。 –