我打算写一个网络应用程序。但是,我想在 Scala 中编写客户端和服务器端。我应该选择Scala.js吗?还是我应该去GWT。在哪些情况下我必须选择其中之一?此外,除了这两个框架之外,还有其他可用于客户端 Web 编程的 Scala 框架吗?
1 回答
这两个都不应该使用。
- 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 库)