我被要求捕获通过在C#中应用函数式编程原理实现的系统设计。对此的要求是使用任何形式的形式来描述设计,而不是非正式的英语。此外,禁止使用UML。
我选择尝试使用F#来实现这些目的,但是如果不使用F#重新实现所有内容,我很难保持抽象级别。
所以我几乎没有问题:
是否有任何架构框架/实践如何描述功能设计?
如何在没有实现细节的情况下公开方法?
如何在F#中创建组件接口?
在OO中,您通常会有不同的体系结构视图(例如4 + 1)。功能设计有类似的东西吗?
答案 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就是这样的一个例子)。