功能范式设计

时间:2017-04-07 13:51:37

标签: architecture f# functional-programming

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

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

所以我几乎没有问题:

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

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

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

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

2 个答案:

答案 0 :(得分:1)

TLDR完全是关于作文的。

您需要使用HKT的所有内容(将其视为Generic Generics)对于图书馆设计而言大多是一项巨大的资产,当您进行纯函数式编程时,它与GO4思维方式根本不同,或本周新的企业编程流行语。

学习Haskell,了解Monads,Functors,Applicatives,Monoids等等。(不要害怕你已经使用它们超过9000次而没有意识到它)然后看看像Free Monad这样的东西废弃锅炉板,镜头,Typeclasses和MTL型变压器,之后你将成为一个更好的图书馆程序员。

答案 1 :(得分:0)

For 1:不是我知道,但我不是一个架构类型的开发人员

For 2:下面是我使用的技术,很喜欢。

[HttpGet]
public ActionResult StreamUploadedVideo()
{
    byte[] test = null;
    DateTime lastModificationDate = DateTime.MinValue;

    using (var ctx = new Entities())
    {
        var result = ctx.Table.Where(x => x.Field == 4).FirstOrDefault();

        test = result.Movie;
        lastModificationDate = result.LastModificationDate;
    }

    return new RangeFileContentResult(test, "video/mp4", "Name.mp4", lastModificationDate);
}

For 3:组件接口是什么意思?

对于4:4 + 1应该对函数式语言有效,并且它似乎与语言无关。

总的来说,我发现功能设计更侧重于高阶函数,数据和行为的分离,更喜欢不可变性和“向上”的副作用(IO Monad就是这样的一个例子)。