【问题标题】:Play 2.0+Java vs. Play 2.0+Scala?玩 2.0+Java 与玩 2.0+Scala?
【发布时间】:2012-09-15 03:44:39
【问题描述】:

我正在考虑在玩 1.2 之后迁移到玩 2.0。困扰我的一件事是人们说 Scala 对于 play 2.0 应用程序更“首选”。我知道 1.2 和 2.0 的差异,但我不确定 Play 2.0 with Java 和 Play 2.0 with Scala 之间是否存在差异

所以我心中有几个问题:

  • 有什么我不能在 Play 中使用 java over scala 做的吗 2.0 应用?
  • 如果我开始学习和使用 scala 有什么好处? 玩 2.0 应用?

【问题讨论】:

    标签: java scala playframework-2.0


    【解决方案1】:

    我刚刚使用 Play 2.0 和 Java 完成了一个原型,现在正在考虑学习 Scala,以便我可以切换到它进行进一步的开发。

    这不仅仅是通常的 Java 与 Scala 讨论——在我看来,Play 框架的问题在于它将 Scala 习语强加到 Java 上。关于calling multiple web services的文档中的一个示例:

    public static Result feedComments(String feedUrl) {
      return async(
        WS.url(feedUrl).get().flatMap(
          new Function<WS.Response, Promise<Result>>() {
            public Promise<Result> apply(WS.Response response) {
              return WS.url(response.asJson().findPath("commentsUrl").get().map(
                new Function<WS.Response, Result>() {
                  public Result apply(WS.Response response) {
                    return ok("Number of comments: " + response.asJson().findPath("count"));
                  }
                }
              );
            }
          }
        )
      );
    }
    

    它可以工作,但看起来不像传统的 Java。那些括号看起来真的很可怕。甚至 Eclipse 也会感到困惑,并且永远不知道我需要或想要使用哪些泛型 - 我总是必须手动选择它们。

    还请注意,在文档中,他们通过删除 @Override 注释,仅使用两个空格进行缩进并整体选择了一个非常简单的示例而没有验证或错误恢复,因此他们不使用太多行,从而使这看起来很漂亮。我什至不确定您是否可以配置代码格式化程序来像这样输出它而不会完全弄乱其他代码。

    在实践中,我最终得到了一个不可读的可怕的 Java-Scala 可憎块,只是为了从另一个服务获取一些数据。

    不幸的是,我在 Scala 中找不到任何组合响应的示例。至少调用单个web services in Scala 看起来更短且更易于阅读。

    【讨论】:

      【解决方案2】:

      AFAIK,最好使用 Scala,因为它提供了更多功能。

      例如(如果我错了,请纠正我),您可以直接将 Iteratees 与 Scala 一起使用(也称为反应式编程),但我不知道如何使用 Java 来实现。

      另外,Play的Java API是Play架构中的上层,核心是用Scala编写的;因此,如果您想了解内部发生的情况,请使用 Scala。

      另外请注意,您可以在同一个 Play 项目中混合使用 Java 和 Scala,这样您就可以顺利迁移到 Scala。

      【讨论】:

      • Iteratees 看起来很有趣,scala 代码看起来很紧凑
      • 当然,Scala 比 Java 简洁 :-) 你也可以看看这个:stackoverflow.com/questions/727078/whats-so-great-about-scala
      • @dreampowder 事实上,AFAIK,iteratees 可能只是 Java 版本中缺少的一个功能,其他元素在两种语言中都非常相似。因此,如果您对 Java 更熟悉,您可以继续使用它并仅将 Scala 用于缺失的部分。如果您没有偏好...您需要自行检查哪种语言更适合您。
      • 是的,您可以在同一个 Play 项目中混合使用 Java 和 Scala,这样您就可以顺利迁移到 Scala
      • @nico_ekito 听起来是个不错的计划,我可以使用 java 进行开发,同时我可以在学习 scala 时将 scala 代码添加到项目中......
      【解决方案3】:

      我是 Play 新手,刚刚编写了一个带有 Java 方面的中小型项目。

      它有效且功能强大,但许多功能似乎都非常以 Scala 为中心,并且对 Java 的支持低于标准。 Java API Doc 几乎不存在,这在 IDE 中带走了一些舒适感(IntelliJ - 我推荐它)。 Java 世界中的集成不是很“自然”(SBT..),它不会构建为 war 或 maven 模块(但似乎有插件可以做到这一点)。您有点失去了现有 Java 工具的好处。

      将 Play 与其他框架区分开来的概念几乎都是 scala native 和 Java 其次。

      我偶然发现了一些错误和怪癖,我总是会遇到我必须阅读和理解才能修复或解决它的 Scala 代码。 (动作、RequestBody 的东西、异步、路由、模板隐式等等)

      所以 Java 方面对我来说只是第二层,尽管他们显然正在努力使它们同样出色。

      现在,在项目之后,我会说它非常有用,甚至会再次使用它(在 Java 中)。

      【讨论】:

      • 是的,似乎每当我在 Google 上寻求 Play 帮助时,我总是会在 Scala 中找到示例。
      【解决方案4】:

      如果我开始在戏剧中学习和使用 scala,我有什么优势 2.0应用?

      正如 djangofan 所说,当您在 Google 上寻求 Play 帮助时,您会得到 Scala 中的示例。

      在 Play 2.0 中有什么我不能用 java over scala 做的吗? 申请?

      但是,我还没有(仍然是初学者)为 Scala 找到等效的 Ebean。我发现的 Scala 示例都使用直接 SQL 来实现持久性。数据库抽象在哪里?

      由于我还没有找到 Play with Scala 的数据库抽象,我将继续使用 Java...

      【讨论】:

      • 我也在同一条路上。仍然来自java。自从我问了这个问题后,他们也大大改进了 java 文档
      • 如果您更喜欢性能而不是方便,则使用直接 SQL 是一个优势。
      • 这就像说如果你更喜欢性能而不是方便,那么使用汇编程序比 C# 更有优势......当然有时间和地点,但在一般的应用程序编码中没有。
      • @GreenAsJade,问题是 SQL 已经是 C# 或 Java 的抽象。 ORM 是 SQL 的另一个抽象层次。查看 SQLite 或 Caché Intersystems,它们都允许查看引擎盖下的内容。您的 SQL 被翻译成由底层引擎处理的指令。遗憾的是,很多开发人员将 SQL 视为数据库的集合。 SQL 是一等公民,而 ORM 是一种便利。事实上,ORM 可以与 EGL 相提并论。它们都在背后抽象出另一种语言并掩盖了一些灵活性。
      猜你喜欢
      • 2012-05-13
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2012-08-01
      相关资源
      最近更新 更多