2016-09-23 53 views
1

概念名單,我有以下對象:服務織物/演員模式的物聯網

  • Item - (ItemId, Name, Color)
  • ItemGroup = (GroupId, Name, Item list)

讓我們假設項目可以屬於多個組和項目身份和ItemActor是必要的。

對於狀態演員,我有這樣的:

  • ItemActor (ItemId) : Get() -> returns ItemContract { ItemId, Name, Color }
  • ItemGroupActor (GroupId) : Get() -> returns GroupContract { GroupId, Name, List<ItemContract> }

這裏的問題:

  1. GroupActor應該只保留ItemIds,並強制其他人調用ItemContracts中的每個ItemActor(循環)?

  2. 或者GroupActor是否保留所有的項目細節並監聽Item change事件以保持其數據保持最新狀態(如視圖)?

  3. 還是有第三個「ViewActor」誰一起編譯數據,調用ItemActors(在一個循環),並監聽事件,以保持它的數據是最新的?

  4. 還是別的什麼?

這些選項都不讓我最有吸引力的,因爲它們要麼需要循環通過事件男主角電話,或高保養項目的管理。

是否有一些指導方針來向我保證一種方式或另一種方式或對這種情況的一般方法?

回答

1

1)您應該可以直接從相應的actor通過其ID來檢索ItemContract。並通過他們的演員直接對這些項目進行任何更改,否則我不理解在此使用演員ItemContract的決定。

2)這是可能的,但看起來像一個可靠的服務是一個更好的收集在這裏。即使對於事件,Actor也是單線程的,所以你不會同時處理更新。這會導致糟糕的表現。

3)只需調用ItemContract的任何單個actor並用於在ItemContracts上提供更新並讓任何負責ItemGroup的單個actor被調用並用於僅與組一起工作。

思考任務 - 你不必使用循環,你可以與演員並行工作(至少檢索他們的狀態)。

想想第三個服務,它將Group actors映射到Item actor。只需映射。沒有狀態更新,沒有事件跟蹤。但是,想警告你,在任何類型的Reliable字典中存儲列表 - 是一個壞主意。

+0

謝謝你的回覆!在服裝面料的土地上很孤獨:)我明白你在說什麼。我已經明確考慮過這些方法。我的問題是,該小組將參考很多和很多項目。你會不會建議在這種情況下擊中每個物品演員?我可以以某種方式分頁的結果,並限制你可以拉的數量,也許... – TBone

+0

@Tbone它取決於。如果幾乎所有時間都需要這些演員,並且您可以負擔這種集羣能力以有效地在節點間分配分區,那麼可以調用每個演員檢索其狀態(如果該狀態的大小相對較小)即可。可能有一些緩存系統的地方。如果你想節省資源,比演員不適合你,你可以嘗試將整個演員的狀態存儲在可靠的字典中。如果在這種情況下,您將面臨寫入相同狀態的性能問題,那麼SF不適合您。 – cassandrad

+0

感謝您的意見。 Microsoft文檔鬆散地建議您可以高效(並行)查詢大量演員。這部分需要我的信心飛躍,以將我的思維方式從我通常將服務電話視爲開銷或昂貴的方式轉變。我仍然認爲我正在合作的數量足夠高,值得我們進一步思考。我感謝幫助! – TBone