功能式编程范式设计

7

我被要求捕获应用函数式编程原则实现的系统的设计,要求使用任何形式主义来描述设计,而不是非正式的英语。此外,禁止使用UML。

我选择尝试使用F#来实现这些目的,但在不重新使用F#重新实现所有内容的情况下保持抽象级别很高仍然存在困难。

因此,我有几个问题:

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

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

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

  4. 在OO中,通常有不同的架构视图(例如4 + 1)。功能设计是否有类似的东西?

2个回答

1
TLDR这篇文章主要是关于组合。在需要使用HKT(将其视为通用泛型)的所有内容中,大多数都是库设计的重要资产。当你追求纯函数式编程时,它与GO4思维方式或企业编程新流行词根本不同。学习Haskell,了解Monad、Functor、Applicative、Monoid等(不要害怕,你现在已经使用了9000多次,而没有意识到)。然后研究Free Monad、scrap your boiler plate、lenses、Typeclasses和MTL风格的转换器,之后你会成为一个更好的库程序员。

0

对于第一点:据我所知没有,但我不是一位架构类的开发者。

对于第二点:以下是我使用和喜欢的一种技术。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接