我被要求捕獲通過在C#中應用函數式編程原則實現的系統設計。對此的要求是使用任何形式來描述設計,而不是非正式的英語。此外,禁止使用UML。功能範例設計
我已經選擇嘗試使用F#來達到這些目的,但是我很難保持抽象級別高,而不必重新實現所有使用F#的實現。
所以,我有幾個問題:
有任何建築框架/實際中是如何描述的功能設計?
如何在沒有實現細節的情況下公開方法?
如何在F#中創建組件接口?
在OO中,您通常會有不同的建築視圖(例如4 + 1)。功能設計有沒有這樣的東西?
我被要求捕獲通過在C#中應用函數式編程原則實現的系統設計。對此的要求是使用任何形式來描述設計,而不是非正式的英語。此外,禁止使用UML。功能範例設計
我已經選擇嘗試使用F#來達到這些目的,但是我很難保持抽象級別高,而不必重新實現所有使用F#的實現。
所以,我有幾個問題:
有任何建築框架/實際中是如何描述的功能設計?
如何在沒有實現細節的情況下公開方法?
如何在F#中創建組件接口?
在OO中,您通常會有不同的建築視圖(例如4 + 1)。功能設計有沒有這樣的東西?
對於1:不,我知道的,但我不是那種架構開發
爲2:下面是我的技術使用和想了很多。
let memoize (f : 'K -> 'V) : 'K -> 'V =
let dict = Dictionary<'K, 'V>()
fun k ->
match dict.TryGetValue k with
| true , v -> v
| false, _ ->
let v = f k
dict.[k] <- v
v
對於3:你是什麼意思的組件接口?
對於4:4 + 1應該對函數式語言有效,並且它似乎與語言無關。一般來說,我發現功能設計更關注高階函數,數據和行爲的分離,偏好於可變性的不可變性以及提升副作用「向上」(IO Monad就是這方面的一個例子)。
TLDR它是所有關於構圖。
你需要使用HKT的所有東西(將它們想象成通用泛型)大多是圖書館設計的巨大財富,當你打算進行純函數式編程時,它與GO4思維模式或新的流行詞根本不同的企業編程一週。學習Haskell,學習Monads,Functors,Applicatives,Monoid等等(不要害怕你已經使用它們超過9000次而現在沒有意識到它)然後研究像Free Monad這樣的東西,鍋爐板,透鏡,Typeclasses和MTL風格的變壓器,然後你會成爲一個更好的圖書館程序員。