关于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来完成开发。之所以这么选择主要还是因为没有学习成本,而且进度,可能出现的问题我都可控制。
编程语言的定位
此处建议大家看看紫杉的回答,说的非常的好
后记
暂时只想到了这么多,后续有更多的想法的时候,我再更新这个文章。
关于Scala的一些感想(一)的更多相关文章
- idea+scala sdk + scala插件
0X01 前言 我的主语言是python,说起java,想起了大二(三年前)上课时教过,课程设计的时候曾经做过个俄罗斯方块,后面其他设计copy代码读懂代码(再后面的课设就用python了). 本次涉 ...
- jdb调试scala代码的简单介绍
在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...
- scala练习题1 基础知识
1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等: 2,在scala REPL中,计算3的平方根,然 ...
- 牛顿法求平方根 scala
你任说1个整数x,我任猜它的平方根为y,如果不对或精度不够准确,那我令y = (y+x/y)/2.如此循环反复下去,y就会无限逼近x的平方根.scala代码牛顿智商太高了println( sqr(10 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- Scala化规则引擎
1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...
- Scala快速概览
IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...
- Scala Macros - scalamela 1.x,inline-meta annotations
在上期讨论中我们介绍了Scala Macros,它可以说是工具库编程人员不可或缺的编程手段,可以实现编译器在编译源代码时对源代码进行的修改.扩展和替换,如此可以对用户屏蔽工具库复杂的内部细节,使他们可 ...
- Scala Macros - 元编程 Metaprogramming with Def Macros
Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level programming)都无法解决的问题,这是因为S ...
随机推荐
- 细说ASP.NET Forms身份认证
阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...
- Play Framework 完整实现一个APP(五)
程序以及基本可用了,需要继续完善页面 1.创建页面模板 创建文件 app/views/tags/display.html *{ Display a post in one of these modes ...
- TCP Provider The semaphore timeout period has expired
我们一数据库服务器上有个作业最近几天偶尔会遇到下面错误(敏感信息已做处理),主要是报"TCP Provider: The semaphore timeout period has expir ...
- Mysql zip包在Windows上安装配置
环境:Windows7 64位系统.mysql-5.7.16-winx64.zip 1.在mysql官网上下载所需的mysql zip包,如我下载的是mysql-5.7.16-winx64.zip: ...
- Lucene索引文件学习
最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和s ...
- Linux下监控服务器状态命令——top
----------------------------------工作中常用的命令,来判断服务器状态是否正常------------------------------------- top命令作用 ...
- MongoDB学习笔记~批量插入方法的实现
回到目录 批量插入在EF时代大叔就自己封装过,原理是将多次SQL连接和多次向SQL发送的指令减少到1次,或者1000条数据1次,而对于EF产生的语句来说,这无疑是性能高效的,因为EF这边在处理时,每个 ...
- 【hive】——Hive初始了解
1.没有接触,不知道这个事物是什么,所以不会产生任何问题.2.接触了,但是不知道他是什么,反正我每天都在用.3.有一定的了解,不够透彻.那么hive,1.我们对它了解多少?2.它到底是什么?3.hiv ...
- js数组中的常用方法总结
栈方法(后进先出) ArrayObj.push()方法 ArrayObj.pop()方法 ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度.ArrayObj.pop() ...
- 你不知道的Javascript(上卷)读书笔记之二 ---- 词法作用域
在前一篇文章中,我们把作用域定义为"管理.维护变量的一套规则",接下来是时候来深入讨论一下Js的作用域问题了,首先我们要知道作用域一般有两种主要的工作类型,一种是词法作用域,一种是 ...