【问题标题】:Are functional languages and programming models like MVC just the next big fad?像 MVC 这样的函数式语言和编程模型是否只是下一个流行趋势?
【发布时间】:2010-09-30 10:28:51
【问题描述】:

最近,我听到了很多关于函数式编程语言(例如 F#)的好消息。此外 [和不相关],我还注意到 MVC 开始获得大量曝光 - 可能是在 Silverlight/WPF 的引入之后。

我从来没有在没有先做研究的情况下加入潮流——事实上,我花了一点时间才实现了 .NET 的飞跃。有人刚刚在我之前的一个关于早期采用新技术的问题中发表了评论,这让我停下来思考。

我一直在努力寻找时间来学习 WPF,但现在我开始怀疑这是否是要走的路。诸如 F# 之类的语言和 MVC 编程模型会继续存在还是只是下一个时尚?还是人们真的认为这些会成为 C#/VB 和 OOP 的潜在替代品?

我的大部分开发都是在内部应用程序上进行的,要么以丰富的 Web 应用程序的形式部署在 Intranet 上,要么以 Winforms 实用程序应用程序的形式分发到各个机器上。到目前为止,我选择的技术非常标准 - T-SQL/PL*SQL、C#/VB、JavaScript/AJAX、CSS。

我想我正在努力确定的是,在不久的将来,在我的工具箱中使用这些技术的哪种组合最有效/最有用?

【问题讨论】:

  • 鸡内脏很清楚一件事:FORTH 是未来。
  • 为什么这个问题被投票结束?
  • @[Shog9]:未来是什么?贫穷?
  • @Shog9,哈哈,我们很快就会返回波兰;)

标签: design-patterns programming-languages future-proof


【解决方案1】:

两者都不是时尚,也不会很快消失,但实际上我只希望看到大多数 .NET 开发人员经常使用这两者中的一个...

F# 和 ASP.NET MVC 之间有很大的不同; F# 是一种函数式语言 - 这在一些场景中具有许多优势,但对于大多数业务线编程而言,通用语言(如 C#)通常更有用。然而,了解编程的函数式风格(尤其是不可变性)会收获很多。我查看了 F#,我希望它可以改进我的 C#,即使我从未在 F# 中编写过任何生产代码。幸运的是,由于委托和 lambda,C# 可以以函数方式使用,即使它不是正式的 FP。

然而,ASP.NET MVC 是一个非常不同的野兽。 MVC(更一般地说)是一种已知的、已建立的且受信任的模式,它:

  • 大大提高了表示层的可测试性
  • 在 UI 层对关注点进行逻辑分离
  • 提供对页面底层 html 的更直接访问
  • 还有很多其他的东西(模型绑定等)

或者换一种说法:对很多人来说,它让 ASP.NET 终于变得有意义了;我完全希望在来年大量使用 ASP.NET MVC。

【讨论】:

  • 我只想指出,对于 LOB,Nemerle 比 F# 更有用。你从 C# 中知道的一切都以几乎相同的方式工作。您将看到的最大变化就是:默认情况下的不变性(以及比 C# 更好的类型推断和更少冗长的语法)。
  • 对它最大的打击:除了重命名之外没有重构支持; Visual Studio 集成虽然非常有用,但远非完美,我还没有尝试过 WinForms 或 WPF 设计器。
  • 除了设计师之外,是什么让 F#语言 不太适合“业务线”应用程序? (即,不是“我的人都不知道 F#”、“我的应用程序已经在 C# 中”等)
  • 我在几个大型项目中使用 C++ 和 Java 中的 MVC 已超过 10 年(首先作为 C++/Java 中的滚动我们自己的 MVC,然后在 Java 中使用 Struts)。绝对不是新时尚。
  • 我主要指的是 ASP.NET MVC;对任何混淆表示歉意
【解决方案2】:

我觉得把函数式编程和 MVC 放在一个问题上很奇怪;我发现他们没有任何关系,除了他们都超过 30 岁并且在他们的社区中非常成熟。因为我对函数式编程有所了解,所以我会谈谈。

函数式编程已经有将近 50 年的历史了,并且会继续存在,尽管尚不清楚它是否会成为主流。显而易见的是,函数式语言已经充当了孵化器,然后为最终进入主流语言的特性提供了试验场。一些例子:

  • 垃圾回收
  • 一流的函数闭包(1995 年添加到 Perl,此后在所有脚本语言中出现;出现在 Smalltalk-80 中;在 Java 和 C# 中以各种方式模拟)
  • 参数多态性(C++ 中的模板)

从长远来看,在您的工具箱中拥有函数式技术将使您成为更好的程序员。或者正如 Eric Raymond 所说,学习 Lisp。 (Lisp 和 Haskell 都充满了强大的新想法,它们会让你的头脑以不同的、无与伦比的但有用的方式爆炸。F# 更像是结合了函数式语言中经过验证的最佳想法,与 .NET 框架相结合。在2009 年初,它似乎最有可能成为主流。)

【讨论】:

  • 我并没有真正将它们混为一谈,因为它们是相关的,而是它们最近都过度曝光了,我想知道它们是否应该添加到我的工具箱中
【解决方案3】:

这些天我在 SO 上看到了很多这样的事情。 (请参阅 hereherehere 了解一些示例。)

According to Wikipedia,Lisp 是目前仍在使用的第二古老的编程语言(被 Fortran 击败)。函数式编程并不比晶体管、鼠标、计算机显示器、硬盘驱动器,或者实际上是个人计算机的概念更流行,在 Lisp 于 1958 年成立时,这些都没有出现。确实,函数式编程编程在典型的商业环境中可能不是特别有用,但它的流行程度的起伏不会使它成为一种时尚,也不会使它成为一种玩具。对计算科学有敏锐理解的程序员明白,函数式编程与其说是一项发明,不如说是一种发现——对计算基本性质的深刻洞察。

你的问题更重要的是,如果编程是你的日常工作(而不是真正的激情),那么 F# 是在浪费你的时间吗?它可能是,从某种意义上说,它不太可能变得流行到足以保证包括在你的简历中。还值得注意的是,如果您确实花时间学习 F#,但您的同事都无法理解您的工作,那么选择它作为开发工具可能弊大于利。这仍然不会使它成为“时尚”。 :)

至于 MVC,它已经存在很长时间了——可能已经有十多年了,但我一直没有跟踪。它不是灵丹妙药,也不难把握;这只是另一种发展模式。值得关注的是,MVC 不是标准,甚至不是非常明确的技术。有许多不同的方式来解释 MVC,我什至敢说,正确的方式不止一种。

MVC 恰好对 Web 开发特别有用,因为 Web 应用程序往往具有非常混乱的前端代码(支持所有这些不同的浏览器是一件非常痛苦的事),而您最不想要的就是让您的业务逻辑陷入困境不必要地使用前端。与 F# 不同,即使编程严格来说只是您的日常工作,学习 MVC 也不是浪费时间,因为如果您发现自己在开发 Web 应用程序,那么遵守 MVC(即使只是松散地遵守)可以节省您的时间职业尴尬。

【讨论】:

  • 感谢您指出这些链接 - 我确实尝试搜索以确保我没有重复其他人的问题,但没有提出任何有用的信息,我感谢额外的资源。
  • 我的简历中出现 F# 已经有一段时间了,它帮助我找到了几份高薪工作。
【解决方案4】:

至于 MVC,它是在 1979 年推出的。我记得在 1988/89 年的时间框架内,我在 Aldus Persuasion for Windows(Powerpoint 的一次竞争对手)的职业生涯中第一次实现了它。 MVC 框架在 RIA 应用程序中风靡一时,例如基于 Adob​​e Flex 的 Web 编程(Cairngorm、Mate、PureMVC 等)。

在我的公司,我们的第一个 Flex 应用程序不是作为 MVC 完成的,但我们对模型有多个视图。一定是一团糟。我们重构为 MVC,开发人员的生活变得更好了。

据我所知,只有那些试图通过各种 Web 框架在服务器端实现 MVC 的人,才是抱怨 MVC 的人。 Fallacies of Distributed Computing 会告诉他们,在表示呈现层被网络连接的鸿沟隔开的情况下,执行 MVC 是一个坏主意。分布式 MVC 和分布式对象一样糟糕。

对于 RIA Web 应用程序,例如基于 Flex 的应用程序,MVC 完全在客户端完成 - 就像在 79 年的 Smalltalk 图形工作站中引入的一样。然后,RIA 客户端仅使用异步服务调用和/或消息传递与服务器端进行通信。

对于一个除了抛出一个 CRUD 表单什么都不做的应用程序,那么是的,MVC 可能是矫枉过正。但是对于具有相当复杂性的富 GUI 应用程序,MVC 仍然是一种非常明智的采用模式。

【讨论】:

    【解决方案5】:

    函数式语言在开发代码中的实际使用完全取决于您所编码的领域。正如其他答案中所述,对于经典的“业务线”应用程序,如果您已经了解 C#,那么您不太可能很快切换到 F#。

    但是:

    • 不在开发代码中使用它并不意味着它不能在其他地方使用(例如分析数据,或在不陷入 OO 噪音的情况下设计算法原型)
    • 学习一门函数式语言将教会您另一种思考编码的方式,这可能对您的 C# 有益
    • 学习函数式语言还可以让您更深入地了解 C# 的函数方面
    • 为了完成我的列表 - 尽管这在 SO 的其他地方已经重复和重复 - 没有人建议 F# 将取代 C#,它只是盒子中的另一个工具。如果您现在不需要它,“购买”该工具可能太贵了,但至少,您应该尝试了解它的作用,以防您当前的工具集不够用。

    【讨论】:

      【解决方案6】:

      不,它们不是时尚。不,人们并不认为这些会成为 C#/VB 和 OOP 的潜在替代品。如果可以节省时间或金钱,人们就会使用它们。

      我认为你必须顺势而为,看看其他聪明人对什么感到兴奋,或者闭上眼睛,希望风暴在几年后过去。有些技术会坚持下去,而另一些则不会。 MVC 与 OO 一样古老,functional programming 与编程一样古老。

      【讨论】:

      • 然而,MVC 和 FP 实际上才刚刚开始获得 OOP 的曝光,因为……永远如此。为什么它们已经这么老了,这么有用,为什么才刚刚开始变得更受欢迎?
      • 互联网和数据库自 1960 年代就已存在。有时这只是环境中的随机事件,例如从高中访问 PDP-10。或者计算机速度已经足够快,或者“现实世界”的程序员正在赶上学术界。
      【解决方案7】:

      一点也不。

      函数式编程语言已经存在了几十年。

      编程模型为“MVC”,实际上是一种设计模式,几年前有许多框架使用它。

      这里唯一的新东西可能就是你的观点。在他们来到 MS 世界之前,你不知道它们的存在或者它们被广泛使用。

      我的第一份工作是在 2000 年使用来自 Apple comp 的 WebObjects Framework。使用它进行开发非常容易。

      【讨论】:

        【解决方案8】:

        函数式编程作为一种范式具有许多优点: 在小型团队中工作时,它提供了许多与面向对象设计相同的优势(数据封装、多态性、代码可移植性......) 由于数据的不变性和无状态的性质,它不太容易出现错误。 更容易穿线。

        【讨论】:

          【解决方案9】:

          我不会谈论 MVC 在 Web 应用程序中的可行性......对于我们这些开发框架的人来说,这些框架已经勾勒出清晰的模式——这只是给同一只猫换皮的另一种方式。我从来没有为 ASP.NET 的整体情况苦恼过,所以认为 MVC 以某种方式使它更简单通常是用词不当。它可能对一种方法有用,但并非对所有方法都有用 - 因此属于工具箱中的另一种工具。

          我们真的需要另一个工具吗?

          【讨论】:

            【解决方案10】:

            我确信 C# 和 VB 将永远存在……但也会有很多人走在新技术的边缘。他们将能够用更少的代码做更多的事情,而您将能够用已有的代码做更多的事情。所以不要担心这将是一场公平的战斗。

            即使……学习更多的东西会让你更好地编程,所以……这取决于你!

            我的意思是,关于学习更多语言如何很好地了解每种语言的能力,然后使用所有这些信息来编写更好的代码,存在很多问题。但如果你花同样的时间支配一门语言,你会没事的。

            【讨论】:

              【解决方案11】:

              根据我对函数式语言的(非常)基本知识 - 作为开发人员,它们可能在我们未来的发展中占有重要地位。许多聪明人评论说,由于处理器没有变得更快,因此需要使用更多内核。因此并行编程将变得更加主流。函数式语言适用于并行任务,因为它们不维护状态(有效地消除了与并行编程/线程相关的大多数常见问题,例如锁等)。

              有关此特定点的更多信息,我想将您引导至 this article,它讨论了可变/不可变数据,并比较了 c# 和 f# 代码 sn-ps。

              【讨论】:

                猜你喜欢
                • 2011-11-15
                • 1970-01-01
                • 2011-04-02
                • 1970-01-01
                • 2011-04-27
                • 2010-10-21
                • 1970-01-01
                • 1970-01-01
                • 2015-09-09
                相关资源
                最近更新 更多