功能范式设计

Mia*_*Mia 7 architecture f# functional-programming

我被要求捕获通过在C#中应用函数式编程原理实现的系统设计.对此的要求是使用任何形式的形式来描述设计,而不是非正式的英语.此外,禁止使用UML.

我选择尝试使用F#来实现这些目的,但是如果不使用F#重新实现所有内容,我很难保持抽象级别.

所以我几乎没有问题:

  1. 是否有任何架构框架/实践如何描述功能设计?

  2. 如何在没有实现细节的情况下公开方法?

  3. 如何在F#中创建组件接口?

  4. 在OO中,您通常会有不同的体系结构视图(例如4 + 1).功能设计有类似的东西吗?

Jus*_*mer 0

对于 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 就是一个例子)。