好吧,
Scala / Akka 为系统开发中的许多常见陷阱提供了不同的概念。仅将一些与 Java EE 进行比较:
=> JavaBeans:
可变数据结构只是邪恶的,不是线程安全的。将它们放入容器中不会改变任何东西。改为使用不可变数据结构,因为 scala 使用 CaseClasses 强制执行。
=> EJB:EJB
的组合很糟糕。实际问题是 EJB 需要具有高度的内聚性才能在可重用性方面发挥作用,而这在实践中几乎没有。把它们塞进一个容器不会让它变得更好。在 Scala 中,使用特征组合,您可以通过受 f 有界多态性保护的构造函数注入来使用临时组合。生活可以如此简单。
=> 事务:
是的,事务管理器已经使事情变得更好,但它仍然需要大型 Java EE 堆栈才能使其工作。在 Scala 中,只需使用 akka 提供的软件事务内存 (STM) 即可。
=> 持久性:
我们真的需要 ORM 吗?像 squeryl.org 这样的项目将强类型 LINQ 添加到 Scala。它不像 Hibernate 那样使用重量级查询语言映射,它只是将查询集成到 scala 中,并由编译器进行全面检查。这当然只适用于关系数据库。对于 no-sql,还有其他可用的解决方案。
=> 缩放?
集群 Java EE?我需要多说吗?
在 akka 中,您只需添加更多服务器,系统就会扩展。为什么?因为远程 Actor 的处理和访问方式与本地 Actor 相同,其他一切都只是配置您的分布式 Actor 系统的问题。Akka 是基于 Erlang 模型的,所以他们不寻找 5-9 的正常运行时间,而是在全系统负载下寻找 9-9 的正常运行时间。同时,akka 非常简单和轻量,您可以在 Android 上使用它。你会尝试在 Android 上运行 Java EE 吗?
https://github.com/gseitz/DiningAkkaDroids
需要明确的是,也许十年前,Java EE 是如何构建大型企业级软件的问题的答案,一旦 Spring 使其可用,它可能是当时最好的可用解决方案。
今天,世界发生了很大变化,大多数旧答案不再适合今天的现实。Scala 并不完美,但如果它真的归结为一行,那就是:
在 scala 中,我在 Java EE 和容器设置所需的一小部分时间内完成了我的实际编程。
甚至 Spring,作为 Java EE 的首选框架,也在向 scala 发展:
http://blog.springsource.org/2012/12/10/introducing-spring-scala/
从 Akka 的概念和最佳实践开始,有一本名为“Akka Essential”的方便的书
http://www.akkaessentials.in/2012/12/adding-turbchargers-to-jee-apps.html