Mia*_*Mia 7 architecture f# functional-programming
我被要求捕获通过在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
Run Code Online (Sandbox Code Playgroud)
对于3:组件接口是什么意思?
对于 4:4+1 对于函数式语言应该是有效的,并且它似乎与语言无关。
总的来说,我发现功能设计更关注高阶函数、数据和行为的分离,更喜欢不变性而不是可变性,以及“向上”提升副作用(IO Monad 就是一个例子)。