2011-09-22 75 views
3

我只是要處理Reactive Extensions,但仍然沒有那個「A-Ha」時刻,這一切似乎都適合。因此,我需要一些幫助,並想知道在簡單的CRUD程序中反應式擴展可能具有哪種角色。反應性擴展...在CRUD應用程序中的示例

有沒有人有任何例子RX擴展如何幫助他們的CRUD應用程序。正如你可以想象的,我正在用C#編寫一個CRUD應用程序......任何示例都被接受,併發布這個消息,以便我可以考慮RX如何適合我正在執行的編程類型。

也許你可能會列出一個編程任務如何從RX中受益,以及在使用RX之前如何完成任務。

回答

0

如果你做靜態CRUD(得到一個窗口/對話框與創建,讀取,更新,寫,無論),那麼我想它可能只會幫助你在你的用戶界面。例如,也許你想要某種自動完成某些輸入。或者您必須查詢服務才能顯示其他信息。 然後RX可以幫你做到這一點。它會隱藏許多異步相關的困難,併爲您提供可讀,易讀的表達式,您可以輕鬆閱讀並快速完成這些表達。 在這個意義上,它只是用於用戶界面/異步的LINQ相同

+0

謝謝卡斯滕。每當我看到RX的例子,我都會看到它在一個非常有限的局部範圍內使用。即以消耗它的相同方法創建觀察值。我想不出任何涉及更全球範圍的RX應用。感謝您的評論。 – Pablo

+0

是的,有一個更大的範圍 - 我使用IObservable很多(雖然不需要RX)。它非常適用於IEnumerable,並且是一個更強大的事件。但在簡單的CRUD場景中我看不到太多用處。當然,如果其他用戶改變了數據或類似的東西,你可以使它通過WCF工作並更新你的用戶界面,但這真的有用嗎? – Carsten

0

一個典型的CRUD應用程序有一些UI(winform,WPF等)和一個數據存儲來獲取數據並顯示在用戶界面中。這兩個組件(UI和數據存儲)之間的數據流可以使用Rx進行建模。

使用Rx,我們可以連接2個組件(UI和數據存儲),例如: UI可以爲創建,更新和刪除(例如:在構造函數中傳遞給數據存儲)提供3個可觀察值。例如:可以將提交按鈕事件映射爲生成創建可觀察值,以及類似地更新和刪除。因此,基本上數據存儲需要訂閱這3個可觀察對象,並且不需要打擾數據如何生成(這對UT也有幫助,因爲您可以輕鬆創建僞觀察對象)。

閱讀將是一個簡單的數據存儲讀取方法,因爲這是關於拉取數據的需求。

所以基本上Rx已經作爲一個抽象來組成2個組件。

0

也許我錯了,考慮兩個答案。 MS傾向於將他們的業務分成許多層,因爲他們對此感興趣。

CRUD是物理實現 - 創建 - 閱讀 - ... 但UI似乎是合乎邏輯的 - 在上下文 - 用戶...

有時候,你需要有一個層 - 經營業務層 - 控制流向RDMS的流量。 伊莫這是非常複雜的。

在財務業務中,「更新」或「刪除」操作是使用新時間戳複製當前行。 這使得它很難有一個清潔的操作 - 物理至少... 而在此之上你可能會認爲CRUD只是一個交易的一部分 - 在飛行中「飛行的邏輯單位」好 - 那你應該做一個COMMIT。

希望這會有所幫助...

2

我已經做了這樣的事情,一直運作良好:

public interface IStorage : IDisposable 
{ 
    IObservable<int> GetOperationsCount(IScheduler scheduler); 

    IObservable<Node> FetchNodes(IObservable<NodeId> nodeIds, IScheduler scheduler); 
    IObservable<Node> StoreNodes(IObservable<Node> nodes, IScheduler scheduler); 
} 

它讓我在後臺線程執行取和商店,並有返回的值給我的UI線程上很容易。

每次致電StoreNodes也建立一個交易,我可以從返回可觀察到的任何錯誤。

我也用GetOperationsCount觀察的顯示給用戶的待處理操作的數量等

我,其中Rx個人經歷讓我想用它來做什麼異步可言 - 事件,開始/結束調用,異步,任務,線程等。它使一切都適合一個模型,可以成爲一個重要的代碼保護程序。