我被要求捕获应用函数式编程原则实现的系统的设计,要求使用任何形式主义来描述设计,而不是非正式的英语。此外,禁止使用UML。
我选择尝试使用F#来实现这些目的,但在不重新使用F#重新实现所有内容的情况下保持抽象级别很高仍然存在困难。
因此,我有几个问题:
是否有任何架构框架/实践如何描述功能设计?
如何公开没有实现细节的方法?
如何在F#中创建组件接口?
在OO中,通常有不同的架构视图(例如4 + 1)。功能设计是否有类似的东西?
我被要求捕获应用函数式编程原则实现的系统的设计,要求使用任何形式主义来描述设计,而不是非正式的英语。此外,禁止使用UML。
我选择尝试使用F#来实现这些目的,但在不重新使用F#重新实现所有内容的情况下保持抽象级别很高仍然存在困难。
因此,我有几个问题:
是否有任何架构框架/实践如何描述功能设计?
如何公开没有实现细节的方法?
如何在F#中创建组件接口?
在OO中,通常有不同的架构视图(例如4 + 1)。功能设计是否有类似的东西?
对于第一点:据我所知没有,但我不是一位架构类的开发者。
对于第二点:以下是我使用和喜欢的一种技术。
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
针对第三个问题:你所说的组件接口是什么意思?
针对第四个问题:4+1应该适用于功能性语言,因为它似乎与语言无关。
总体而言,我发现函数式设计更注重高阶函数、数据和行为的分离,更偏向于不可变性而非可变性,并将副作用“向上”提升(IO Monad 就是一个例子)。