7

我打算写一个网络应用程序。但是,我想在 Scala 中编写客户端和服务器端。我应该选择Scala.js吗?还是我应该去GWT。在哪些情况下我必须选择其中之一?此外,除了这两个框架之外,还有其他可用于客户端 Web 编程的 Scala 框架吗?

4

1 回答 1

4

这两个都不应该使用。

  • ScalaGWT 已经被废弃一年多了。
  • Scala.js 是实验性的,需要您的用户下载 16Mo 库(它会有所改进,但除了某些游戏应用程序之外是不可接受的)。

[编辑] 图书馆已经缩小规模,这个说法现在不再正确。

其他技术是可用的,但选择一种取决于您要编写的应用程序类型。如果您计划使用模板技术(如 JSP 或 JSF)开发瘦客户端,您可以考虑使用Play 模板、Lift、Scalatra,...

为了帮助您考虑您的需求,这里有一些想法:

您将需要小部件和其他东西来设计您的 UI,而这些东西通常是面向组件和事件驱动的。在这种情况下,FP 不会比 OOP 提供太多优势。

在标准的企业应用程序中,scala.js 将有助于为 js 代码设计一个干净的函数库。这种库肯定有很多东西可以提供,但它不会成为客户端代码的核心。相反,小部件、MVC 基础架构和与后端集成的层将是您将大部分时间花在工作上的东西。

GWT 已经存在了很长时间。我认为这是一项成熟且经过验证的技术。您必须学习一些调整和模式才能充分发挥其潜力,但在我看来,这远远少于编写干净和可维护的 js 代码所需的内容。

GWT 根本不要求您了解 js(尽管我们都同意最好了解浏览器中发生的事情)。如果你不知道你在编译什么,你就不会使用 scala.js。

如果您已经非常了解 javascript,那么直接键入您的 scala 代码会更容易,就好像它是某种启用了 scala 的 js 一样。

大型团队使用 GWT 比使用 js 更容易,因为您可以轻松编写代码,同时支持代码测试和重用。

GWT 绝对是面向对象(小部件/模型/视图/控制器)和事件驱动的。如果您计划以功能齐全的方式设计界面(用于游戏或非常特定的应用程序),我认为它会妨碍您的设计。


GWT

  • 成熟
  • 这是一个成熟的工具包
  • 特定于 GWT 的模式和良好实践有据可查
  • 与 java/scala 后端轻松集成
  • 开发规模远远超过大团队
  • 如果你还不懂 js 最好
  • 面向对象,GWT 的优点就在那里(依赖注入,MVP,Async,i18n,JSR-303 验证......)
  • 将优化您的代码并将其编译为一个小的 js 文件

斯卡拉.js

  • 相当新的,正在进行中的工作
  • 不是工具包,而是编译器
  • 因此,您需要了解 js 的良好实践、设计模式和库,因为您的 scala 代码将(相当)直接与 js 交互
  • 需要自己编写/连接一个层以与后端集成
  • 处理一个大团队要困难得多
  • 无需知道 GWT :-)
  • 函数式编程,Scala 的优点就在那里(特征、模式、案例类……)
  • [编辑] 在提出问题时,需要一个 16 Mo 库

最后的建议

  • 您是否需要 UI 组件之间的小部件和复杂的交互,或者使用模板技术就足够了?
  • 使用ScalaGWT 需要您自担风险。
  • 您可以将 scala.js 用于 js 库设计、实验项目、游戏……您可以从 GWT 应用程序调用从 scala.js 编译的 js 代码(如果您通过了 16 Mo 库)
于 2013-09-01T20:22:57.990 回答