我正在学习F#,我想构建我家项目的下一个模块。到目前为止,我的大多数F#代码都是使用命令行编写的测试代码。我还为Winforms面板做了一些自定义绘图。到目前为止,我没有必要使用一个可变变量。但是现在我正在尝试编写一些实际的代码,一旦我进入ViewModel部分,似乎我别无选择,只能使与UI交互的变量变得可变。这是真的,还是我缺少的东西?
答案 0 :(得分:6)
对于MVVM,F#具有一个非常显着的优点:它不允许循环依赖。这使得破坏模式非常困难:即允许模型直接影响视图模型,或者视图模型访问视图。正如Bent所说,F#是多范式的:它支持getter和setter的属性,而这些不是用语言来避免的。
有趣的是,我认为缺少功能是F#的优势之一,但我觉得正是这种循环依赖的排除使得该语言成为企业架构的一个很好的选择。
我在https://github.com/SpiegelSoft/Astrid有一个玩具项目。您可以通过它查看我是如何使用ReactiveUI实现MVVM的。
答案 1 :(得分:2)
是的,这是真的。 MVVM的固有特性排除了不变性。
如果不变性确实对您很重要,那么请看看Dmitry A. Morozov创建的MVC框架。这是GitHub上的项目页面:
http://fsprojects.github.io/FSharp.Desktop.UI/
我不确定我会用它,因为很少有人这样做,但绝对值得研究。
至于语言;
如果我没记错的话,他们最初尝试使用Haskell,但后来认定Ocaml更实用。这就是F#的基础。 Haskell就像它们一样纯粹,它在.NET世界中成为一个问题,而F#是一种更适合.NET中现实世界需求的多范式语言。
在某些情况下,不要在F#中使用mutable感觉不好。我甚至会说你的意思。它一点也不差,从长远来看,它仍然比C#更有效地完成工作。