2012-07-09 27 views
2

從OOP背景來看,我在函數式編程中遇到了不可變對象/記錄/消息概念的一些問題。轉換大型不可變消息

比方說,我通過一個函數管道傳遞一個PurchaseOrder記錄,其中每個函數應該添加或更新此記錄中的數據。

當處理可變狀態時,我會簡單地設置消息傳遞的某些特定屬性。

當處理不可變記錄時,是否有一些設計技巧使事情變得更容易? 複製每一個字段只改變一個字段只是一個痛苦。

{ A = x.A ; B = x.B ; C = x.C ; D = x.D ; E = somethingnew; } 

我想盡量分組數據是一個很好的方法來處理它,從而避免複製所有字段。 有沒有其他方法或設計指南?

回答

0

我來自一個非常純淨和極端OOP的背景是,我的面向對象的設計往往是99%不可變對象(即使在允許變異的語言中)。如果你有一個函數管道,每個函數都應該添加或更新記錄中的數據,按照我的經驗,每個函數都會處理該記錄的子問題和子概念,所以你應該爲每個函數創建一個類/類型/那些遵循OOP最佳實踐,如SRP,SoC。如果任何類/記錄/類型有超過4個或5個字段/變量/屬性,我認爲你可能在這裏承擔了太多的責任。如果將問題分成幾個子問題,則管線的每個功能都會創建記錄的子記錄,主功能將它們全部組合起來以創建主記錄。根據我的經驗,遵循傳統的面向對象技術可以使您的設計能夠讓您在不發生任何突變的情況下實現您想要的功能。

+0

請了解段落。 – Marcin 2012-07-10 16:44:20