Scala (2.8)/Lift (2.2) vs. C# (4.0)/ASP.NET-MVC 3

24

最近我在个人时间里学习Scala。在工作中,我正在学习C#/.NET(4.0)。我对两者都不够熟悉,只能进行最基本的评估,无法深入了解LiftASP-MVC 3。我处于十字路口。考虑到我的时间非常有限,我必须选择其中之一,在接下来的3-6个月内学习并构建一个应用程序。

今天我看到了这篇 Lift 文章,立刻被吸引了。我已经尝试过文章中列举的大多数事情,这让我感到无尽的挫败和头疼。其中一些我最终放弃了,并实现了简单的、不安全的版本,只是为了完成项目。因此,这篇文章使 Scala/Lift 变得非常有吸引力。

然后在午餐时,我的团队成员(也是朋友)谈论他使用 C# 和 .NET 4.0 进行 ASP-MVC 3 的工作。听起来很有趣,值得学习和使用。他谈到的一些内容似乎与我早上读到的 Lift 文章有所重叠。

我的问题是:考虑到我的时间有限,选择 Scala/Lift 还是 C#/ASP-MVC 3 有哪些优缺点?C#/ASP-MVC 3 与 Scala/Lift 相比有什么优势?

为了简化我的评估:请假设这些技术的当前最新版本;Scala 2.8.1(2010年12月),Lift 2.2(2011年1月),C#/.NET 4.0(2010年4月)和ASP-MVC 3(2011年1月)。

感谢您在这个关键的架构决策点上帮助我。


更新:2011年3月19日12:25 CDT:
我后来发现了一些与Scala/Lift相关的资源,它们似乎非常有帮助:
1. 免费电子书(PDF和HTML),标题为“探索Lift(基于Scala的Web框架)”
2. Lift的创作者撰写的维基文章,标题为“首先看View”

电子书的第一章非常有帮助。我真的很喜欢Lift设计原则和实现对“关注点分离”(将代码从显示片段中分离出来)和“约定优于配置”的关注。从目前的情况来看,虽然ASP-MVC 3也使用了相同的“强指南”,但它仍然依赖于一个代码和展示混合的层次。在这里,既不是网站设计师,也不是软件工程师敢在开始之后踏足的地方。也就是说,在开始之后,会有维护问题。我希望有人告诉我我在这里是错的。


我的朋友刚给我发了一个链接,似乎专门提出了Scala/Lift的优势:http://scala-programming-language.1934581.n4.nabble.com/Scala-Architecture-td1979513.html - chaotic3quilibrium
2
偏好和目标,大多数情况下。实际上,一个人可以使用Java / Stuts或其他什么东西。我个人更喜欢Scala编程语言,尽管微软解决方案的集成方面可能非常吸引人。当然,微软解决方案需要在微软软件上运行,这可能会变得更加昂贵等等。Lift与ASP.NET不同,它是基于续延的,而不是(手动)恢复控制状态的。话虽如此,我在工作中使用C#3 / ASP.NET -- 工作围绕SharePoint -- 它仍然很高效,不会完全令人沮丧(即它与PHP相去甚远);-) - user166390
@pst 仅仅谈论ASP.net有点含糊不清。您是指WebForms还是MVC?我不知道MVC中是否有任何“restore-control-state”相关的内容。您能否详细说明一下您的意思? - CodesInChaos
1
@CodeInChaos 是的,ASP.NET/MVC(和AJAX)--每次页面加载后(这是一个小谎言),控件状态必须被恢复,以便能够“恢复”会话的上下文。也就是说,第一步是通过水合作用(在此处管理状态的各种方式)将状态(控件层次结构)放回到找到它之前的方式中。如果在提交回发之前创建了一组复选框,则必须在回发后将其恢复以供使用,等等--不匹配会导致错误。大多数情况下,这是自动化的(特别是与ASCX一起),但控件中心模型与Lift不同。 - user166390
2
@pst你在描述如何恢复控件状态时,对于ASP.NET Webforms非常准确,但是在ASP.NET MVC中完全不会发生。在ASP.NET MVC中,您可以将视图模型填充并作为参数传递给您正在调用的操作,但这与页面上控件的状态无关。 - Mark Kanof
4个回答

8

Scala / Lift 的优点:

  • 可以使用大量的开源解决方案/库,适用于Web和企业级应用
  • 更具创新性
  • 成本降低
  • (主观: 更喜欢Scala语法和数据模型)

C# / ASP 的优点:

  • 你正在工作中学习它,因此你更熟悉.NET技术。
  • 花费更少的时间学习(由于第一点),并在工作中得到支持。

对我来说,Scala / Lift是更有效的解决方案,但我更熟悉Java / JVM,并且没有与.NET绑定。


2
我刚刚在维基百科上阅读,c#似乎涵盖了Scala所提供的大部分内容。
wikipedia中可以看出,Scala还提供了一个统一的类型系统(与C#相同,但不同于Java),其中所有类型,包括整数和布尔值等原始类型,都是任何类型的子类。Scala还包含一些其他功能(或非功能),这些功能在C#中存在但在Java中不存在,包括操作符重载、可选参数、命名参数、原始字符串(在Scala中可能是多行)以及无需检查的异常。
Scala只提供了一些额外的功能,由于你有使用.net的经验,我建议您坚持使用c#。

1
从很多方面来说,Scala的类型系统都比C#强许多。 - Millie Smith
1
除了模式匹配、更好的函数支持等,我在工作中使用C#,我知道它也有其优点。 - Millie Smith

1

Scala 优点:

  • 支持函数式编程
  • 如果使用 JVM,对 Linux 的支持更好(对于 C# 而言,使用 Mono 不被微软支持)

C# 优点:

  • 工具/IDE 更加成熟/稳定
  • 目前市场上有更多的开放职位

24
C# 也支持函数式编程。 - Jim Ferrans
3
C# 也支持函数式编程。 - Anubis
3
C# 也支持函数式编程。 - nawfal
3
C#也支持函数式编程。 - bbqchickenrobot
2
C# 也支持函数式编程。 - Mafuba
1
C# 也支持函数式编程。 - Happypig375

0
请看这里http://circumflex.ru/(英文网站)。 一个新的吸引人的Scala Web框架。
不是MVC,但非常适合桌面型应用程序:http://vaadin.com/ - 服务器端RIA。 您可以使用Scala、Java或任何其他JVM语言,只需一个JAR。客户端无需插件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接