最近,我听到很多关于函数式编程语言的好东西,比如F#.另外[和无关],我也注意到MVC开始获得大量曝光 - 也许是自Silverlight/WPF推出以来.
如果没有先做我的研究,我从来就不会成为一个赶时髦的人 - 实际上我花了一些时间来实现.NET的飞跃.有人刚刚在我之前提出的关于早期采用新技术的问题中发表了评论,这让我停下来思考.
我一直在努力争取时间学习WPF,但我现在开始怀疑这是否可行.像F#这样的语言和MVC编程模型是留下还是仅仅是下一个时尚?或者人们真的认为这些成为C#/ VB和OOP的潜在替代品?
我的大多数开发都是内部应用程序,可以是在内部网上部署的富Web应用程序,也可以是winforms实用程序应用程序,以便在各个计算机上进行分发.到目前为止,我的选择技术非常标准--T-SQL/PL*SQL,C#/ VB,JavaScript/AJAX,CSS.
我想我正在努力确定的是,这些技术的混合在不久的将来会在我的工具箱中最有效/最有用吗?
既不是时尚,也不会很快消失,但实际上我只希望看到大多数.NET开发人员经常使用这两个中的一个......
F#和ASP.NET MVC之间有很大的不同; F#是一种函数式语言 - 在一些场景中具有许多优点,但对于大多数业务编程而言,诸如C#之类的通用语言通常更有用.然而,从了解编程的功能风格(尤其是不可变性)中可以获得很多东西.我看了F#,我希望它能改进我的C#,即使我从未在F#中编写任何生产代码.幸运的是,感谢代表和lambdas,C#可以以功能的方式使用,即使它不是正式的FP.
然而,ASP.NET MVC是一个非常不同的野兽; MVC(更一般地说)是一种已知的,已建立的和可信的模式:
大大提高了表示层的可测试性
在UI层进行关注点的逻辑分离
提供对页面底层html的更直接访问
还有很多其他的东西(模型绑定等)
或者另一种方式:对很多人来说,它使ASP.NET终于有意义; 我完全相信,以使不少在未来一年使用ASP.NET MVC的.
我发现在一个问题中将函数式编程和MVC混为一谈非常奇怪; 我发现它们没有任何关联,除了它们都超过30岁并且在他们的社区中非常成熟.因为我对函数式编程有所了解,所以我将对此进行讨论.
功能性编程已经有近50年的历史了,虽然尚不清楚它是否会成为主流但尚不清楚.显而易见的是,功能语言已经充当了孵化器,然后为最终进入maintstream语言的功能提供了基础.一些例子:
垃圾收集
一流的函数闭包(1995年在Perl中添加,从那时起用于所有脚本语言;在Smalltalk-80中出现;在Java和C#中以各种方式模拟)
参数多态(C++中的模板)
从长远来看,在您的工具箱中使用功能技术将使您成为更好的程序员.或者正如Eric Raymond所说,学习Lisp.(Lisp和Haskell都充满了强大的新想法,这些想法将使你的头脑以不同的,无与伦比的,但有用的方式爆炸.F#更多地是来自功能语言的最佳验证思想的整合,与.NET框架结合. 2009年初,它似乎有成为主流的最佳机会.)
这些天我在SO上看到了很多这样的事情.(见这里,这里和这里的几个例子.)
根据维基百科,Lisp是目前仍然常用的第二种最古老的编程语言(被Fortran击败).功能编程不再是晶体管,鼠标,计算机显示器,硬盘驱动器,或者实际上是个人计算机的概念,在1958年Lisp创建时都没有出现过这种时尚.确实功能正常.编程在典型的商业环境中可能不是特别有用,但它的上升和下降的普及水平并不会使它成为一种时尚,也不会使它成为玩具.对计算科学有敏锐认识的程序员理解,函数式编程不是一个发明,而是一个发现 - 深入洞察计算的基本性质.
更重要的是,如果编程是你的日常工作(而不是真正的激情),F#是浪费你的时间吗?从某种意义上说,它可能不会变得非常受欢迎,包括在你的简历上.值得注意的是,如果你花时间去学习F#,但是你的同事都不能理解你的工作,那么选择它作为开发工具可能会带来更多的弊大于利.这仍然不会使它成为一种"时尚".:)
至于MVC,这已经存在了很长一段时间 - 可能超过十年,但我没有跟踪.它不是银弹,也不难掌握; 这只是另一种发展模式.值得注意的是,MVC不是标准技术,甚至也不是一个非常明确的技术.有许多不同的方法来解释MVC,我甚至冒昧地说,有不止一种正确的方法来做到这一点.
MVC碰巧对Web开发特别有用,因为Web应用程序往往会有非常混乱的前端代码(支持所有这些不同的浏览器是一种巨大的痛苦),而您最不希望的是让您的业务逻辑陷入前端 - 不必要的.与F#不同,学习MVC并不浪费时间,即使编程严格来说只是一天工作,因为如果你发现自己正在使用Web应用程序,坚持MVC(即使只是松散地遵守它)可以节省你的屁股从专业的尴尬.