关于Scala的一些感想(一)

简介:

最近在完成自己的开源项目Application-center的时候,使用了Scala编程语言。

在使用了一段时间下来以后,有一些不是很“清晰”的感受,说实话我自己还没有很好的整理清楚,所以就先记录下来,不保证一定正确,只是个人的在现有经验下的看法而已

框架的选择

Java之所以这么繁荣很大的程度上是因为第三方开源社区的支持,当我们使用Java完成一些项目的时候,我往往都是先求助于开源社区,看看是否存在现有的解决方案,绝大多数时候我们都能找到合适的框架,然后直接用或者稍微修改一下就好了。

而且由于Java毕竟已经在企业开发领域活了许久了,因此很多领域中,业界往往都已经选择出了“佼佼者”,比如我们使用Spring来管理Bean的生命周期,使用Spring MVC作web框架,Mybatis作持久层的框架使用,AOP使用Spring AOP或者更强大的Aspectj等。

而由于Scala也是近几年“流行”起来的,虽然使用Scala编写的开源框架很多,但是在很多领域中,往往都还没有选择出其中的“佼佼者”,因此对于我们这些初学者来说,往往都会存在:「不知道该用什么框架」的疑惑。

虽然有Awesome Scala 但是我们也开源发现很少有一家独大的情况。不过好在Scala基于JVM,可以使用Java的框架,这样我们的选择面也更加的多了起来。

我最初在完成Application-center的时候,调研了下面的几组方案:

  • Play framework + Slick 3.0.3
  • Spray-can + Slick
  • Spring MVC + Mybatis
  • scalatra

Play Framework从目前来看在Scala编写的web框架中处于稍微“领先”的地位,但是对于之前一直使用Spring Mvc的Java开发者来说,在使用习惯上差别太大了。还有Slick,感觉这个框架是像整合hibernate和Mybatis的优良属性,但是目前感觉有点“四不像”,而且对事务的支持感觉太低级了,完成没法和Spring的事务管理器相提并论。也由很多开发者,包括我也使用Scala基于JDBC的风格编写过一个Scala JDBC小工具来和关系型数据库打交道。但是说实话都不是太好用。Spray的那一套东西,基于Akka,性能很不错,但是那套东西不是为了web开发而弄的,更多的是为了后端数据接口弄的。而且对于不熟悉Akka的开发者来说,学习成本简直不要太高太高。

项目初期我都使用新的工程尝试了前两种解决方案,可能是因为我对Scala和Akka还不是很熟练,所以感觉学习成本高了很多,尤其是Spray那玩意,让我一度怀疑我的智商。

因此为了「不折腾」为了加速开发进度,我最终还是选择了Spring Boot + Mybatis来完成开发。之所以这么选择主要还是因为没有学习成本,而且进度,可能出现的问题我都可控制。

编程语言的定位

此处建议大家看看紫杉的回答,说的非常的好

后记

暂时只想到了这么多,后续有更多的想法的时候,我再更新这个文章。

目录
相关文章
Altium Designer如何设定/修改PCB板边框外形
Altium Designer如何设定/修改PCB板边框外形
2710 0
|
NoSQL MongoDB 存储
MongoDB 一致性模型设计与实现
本文源自阅读了 MongoDB 于 VLDB 19 上发表的 [Tunable Consistency in MongoDB](http://www.vldb.org/pvldb/vol12/p2071-schultz.pdf) 论文之后,在内部所做的分享(分享 PPT 见文末)。现在把分享的内容整理成此文,并且补充了部分在之前的分享中略过的细节,以及在分享中没有提及的 MongoDB Causa
2043 0
MongoDB 一致性模型设计与实现
Vue3接口数据报错TypeError: target must be an object
Vue3接口数据报错TypeError: target must be an object
1649 0
|
存储 缓存 负载均衡
JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)
JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)
69249 9
JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)
|
存储 NoSQL 测试技术
go最佳实践:如何舒适地编码
go最佳实践:如何舒适地编码
|
机器学习/深度学习 数据采集 存储
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
**摘要:** 这篇文章介绍了决策树作为一种机器学习算法,用于分类和回归问题,通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术,以及优缺点。接着,文章讨论了集成学习,包括Bagging、Boosting和随机森林等方法,解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT(XGBoost)作为集成方法的实例,强调了它们在处理复杂数据和防止过拟合方面的优势。最后,文章提供了选择集成学习算法的指南,考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
323 0
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
flutter 引用图片资源遇到的问题
flutter 引用图片资源遇到的问题
272 1
|
应用服务中间件 网络安全 开发工具
利用 KMS 对文本信息进行签名验签实践
通过阿里云的KMS产品针对文件或者证书文件进行签名验签,可以有效解决攻击者针对敏感文件、重要文件在传输过程中被篡改,其次可以实现证书双向认证过程中的证书合法性校验,真正做到传输链路安全。
771 1
|
存储 缓存 Cloud Native
云原生系列Go语言篇-模块、包和导入 Part 2
我们已经学习了如何在单个模块中使用包,接下来该学习如何集成第三方模块及其中的包。然后,我们会学习如何发布自己模块并添加版本,以及Go的中央服务:pkg.go.dev、模块代理和校验和(checksum)数据库。
268 5
|
算法 安全 物联网
用于封装安全载荷 (ESP) 中的基于计数器的密码的隐式初始化向量 (IV)
本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已被互联网工程指导小组 (IESG) 批准出版。有关 Internet 标准的更多信息,请参见 RFC 7841 的第 2 节。
765 0
用于封装安全载荷 (ESP) 中的基于计数器的密码的隐式初始化向量 (IV)