2011-01-19 69 views
2

我已經實現了精簡框架的流行層(包括類似BinaryFormatter的串化器)。我希望能夠序列化由lambdas和迭代器等適當的東西引起的編譯器生成的類,以便如果(例如)lambda及其封閉變量(即display class實例)被添加到可序列化對象上的事件,並且所有封閉變量都是可序列化的,那麼結果對象圖形仍然是完全可序列化的。Lambdas,封閉變量,顯示類,可序列化和流行層

這是可以接受的,如果這些類的實例只能由完全相同的構建反序列化,他們從序列化的二進制文件的 - 患病層主要是提供耐久性應的應用程序意外終止(停電設備重啓是不同的可能性),並且序列化的數據流預期不會向前或向後兼容,或者甚至在相同源代碼的兩個編譯中兼容的情況下 - 所有結果都將被髮送到服務器無論如何,我們接下來會談到它,而我們不會在斷開連接的情況下進行更新。

在這個有限的上下文中,我的格式化程序將這些編譯器生成的類視爲可序列化是否合理?我看到的唯一選擇是手動實現編譯器支持的所有模式,無處不在,可串行化是一個值得關注的問題,其後果從過度冗長到幾乎無法讀取。

回答

2

我看到你做了什麼,但我的經驗這是一個更好的主意專心序列化數據,並通過回滾/前進到已知狀態,可能使用類似的本地處理耐久性CQRS隊列或其他存儲「你如何到達那裏」的方式。

回覆的具體問題,問題(只工作在相同的生成等)我猜測應該是OK的緊範圍之內,但要看是否任何捕獲了很多那些變量沒有明智的序列化 - 即像UI元素(很容易被不可見的this意外捕獲)無法重建(OS句柄等)的東西。如果它是孤立的數據(我的意思是:圖形只是你自己的代碼中的數據 - 沒有非託管的依賴關係),那麼我想應該是好的。

另一個問題是CF在整個框架中缺少更強的反射,這可能會使它比常規框架(例如GetUninitializedObject)更加笨拙。可能是可行的,但多一點工作。

+0

Prevalence只是一種通過內存對象圖提供事務屬性的技術,實現了檢查點和重做日誌的序列化。本質上,數據模型是對象圖,其語義是由實現這些對象的代碼的語義定義的。這是一個有意的設計決定,數據格式不是發佈或記錄的接口。 – 2011-01-19 22:01:20