最近在完成自己的开源项目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的一些感想(一)的更多相关文章

  1. idea+scala sdk + scala插件

    0X01 前言 我的主语言是python,说起java,想起了大二(三年前)上课时教过,课程设计的时候曾经做过个俄罗斯方块,后面其他设计copy代码读懂代码(再后面的课设就用python了). 本次涉 ...

  2. jdb调试scala代码的简单介绍

    在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...

  3. scala练习题1 基础知识

    1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等:     2,在scala REPL中,计算3的平方根,然 ...

  4. 牛顿法求平方根 scala

    你任说1个整数x,我任猜它的平方根为y,如果不对或精度不够准确,那我令y = (y+x/y)/2.如此循环反复下去,y就会无限逼近x的平方根.scala代码牛顿智商太高了println( sqr(10 ...

  5. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  6. Scala化规则引擎

    1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...

  7. Scala快速概览

    IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...

  8. Scala Macros - scalamela 1.x,inline-meta annotations

    在上期讨论中我们介绍了Scala Macros,它可以说是工具库编程人员不可或缺的编程手段,可以实现编译器在编译源代码时对源代码进行的修改.扩展和替换,如此可以对用户屏蔽工具库复杂的内部细节,使他们可 ...

  9. Scala Macros - 元编程 Metaprogramming with Def Macros

    Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level programming)都无法解决的问题,这是因为S ...

随机推荐

  1. ToList()方法

    //ToList()方法,翻译:把****转化为List集合. // 控制台试试: string[] fruits = { "apple", "passionfruit& ...

  2. Cannot execute as the database principal because the principal "guest" does not exist, this type of principal cannot be impersonated, or you do not have permission.

    今天遇到这样一个问题:一个系统的作业需要给系统Support人员开放SQL Agent下作业的查看.执行权限.数据库版本为SQL Server 2014 SP2,给这个系统Support人员的NT账号 ...

  3. web应用中使用JavaMail发送邮件 。。转载

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  4. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  5. Python基础之面向对象

    一.面向对象概述 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程 ...

  6. 几款比较好用的C语言的集成开发环境及在windows下用命令行编译C代码

    最近要用到C,所以尝试了这几款windows平台下比较好的IDE. VS2015:比较复杂和庞大,据说从2013版本开始支持C99标准. C-free:轻巧,但是不支持C99. vc++6.0:很多学 ...

  7. CF731C. Socks[DFS 贪心]

    C. Socks time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  8. python文件读写的学习

    文件的读写: file.flush()  # 强制刷新 file.readlines()  # 将所有的内容生成一个列表,不适合操作大文件 for line in file:  # file相当于一个 ...

  9. 转: Protobuf 的 proto3 与 proto2 的区别

    Protobuf 的 proto3 与 proto2 的区别   On 2015-07-17 19:16:00 By Soli   Protobuf 的 proto3 与 proto2 的区别 这是一 ...

  10. PHP的魔法方法__set() __get()

    php的魔法方法__set()与__get() Tags: PHP 我们先来看看官方的文档如何定义他们的: public void __set(string $name, mixed $value); ...