henix / blog

some notes
0 stars 0 forks source link

Scala 的一些库 #4

Closed henix closed 9 years ago

henix commented 11 years ago

sql: slick / 现在在用 commons-dbutils 对 scala 没有原生支持

json: sjon 如果有 gson 那么流畅就好了

henix commented 11 years ago

logging 用 slf4s + slf4j-api + logback

commons-lang3 的 StringUtils.isBlank 和 StringEscapeUtils.escapeHtml4 如果有替代的话...

httpclient 用 ning 的 async-http-client

henix commented 11 years ago

http://www.scala-lang.org/node/1209

准备尝试一下 JRebel

henix commented 11 years ago

现在真心觉得 slick 没什么意思,封装太重,不想尝试,还是继续用 commons-dbutils 好了。

举个例子,有时候 sql 可能非常复杂,join 的表可能非常多。比如

SELECT sid, ps.groupid,
GROUP_CONCAT(attr_value SEPERATOR ' ')
FROM product s
LEFT JOIN produect_details ps USING(sid)
LEFT JOIN ...
GROUP BY sid

不管 sql 多复杂,commons-dbutils 都是一样的接口。但用 slick?slick 在几张简单的表,简单的逻辑的时候也许很好。

总体说来有一些库是这样的:如果你的使用场景跟库的作者所想象的场景恰好一致,那么用起来会很爽。但是如果不一致呢?就没有办法扩展、修改和自定义了。

这些库的扩展能力太弱。我认为造成这个问题的原因有几个。其中最主要的是,库对于自身的定位有问题。这个库希望解决的问题的定义域太大,导致库本身没法以简洁的方式写出来。所以,do one thing and do it well 。一个库应该只干一件事,而这件事应该是定义在最根本的层面上的。

henix commented 11 years ago

sjon :不同于 gson 依靠反射来序列化,使用类似 Haskell 的 type class 的方式,实现上充分利用了 scala 的 implicit argument 。

造成这种现象的原因也许是因为 scala 由于类型擦除,比 Java 还难反射。

想法很好,但开发看起来不太活跃,几天前提的 issue 现在没人管。

另外 guava 的 Optional -> Option ,Precondition -> require() 都可以使用 scala 内置的