现代的JAVA
以前写PHP,遇到nodejs后就果断把PHP扔了,然后考虑到v8引擎虽然屌,但应该是干不过JVM的,于是总想学点JVM上的语言,来弥补nodejs运算性能的短板。本来第一选择是Scala的,现代化的语言、多范式、兼容java,反正优点很多。其实也没问题,但是总觉得少点啥,直到花两天时间把java8的Lambda表达式看了,也看了一些比较现代化的更新比如Optional、mulit-catch,顺带把面向java8的一些库给过了一遍。顿时觉得java这门语言依然焕发着青春,我以前对java的看法一直停留在JDK5那个时代,遍历都要自己写个迭代器那种...创建模型的时候都要写一堆setter、getter那种...为了实现解耦,引入IOC的思想,同时也带来了一堆xml这种...为了配置ORM库,也引入了一堆xml标签这种,逻辑全都在标签里,导致了标签的滥用...很多人还对java向这种方向发展自信满满,觉得这就是终极解决方案了。
不能太否定这个方向吧,但是我个人的观点是这个方向违背了编程的本意,写到最后,我们会慢慢丧失编程能力。代码就是代码,借助少量的工具辅助是可以的,但是像现在的java框架,大肆的使用xml,大肆的运用逻辑混乱的标签,这实在不是我想看到的。但是从企业级开发来说,ssh、ssm之流,确实可以降低成本,因为基本招个写java的coder就能维护。还有很大原因就是企业级的开发,业务变更不像互联网公司变化这么大,都是一点点的渐进式的变化,基本问题都有现成的成熟的解决方案,凭心而论ssm这种开发方式反而能提高生产力。再说到java的历史,我觉得java的专家们在语言的发展方向上的部分做法也是有问题的,他们大都是企业级开发,提出的EJB本质就是基于C/S架构的一种封装,十分笨重被各种前后端分离的方式吊打。SOAP只是基于http+xml的一种封装,被更灵活简单的http+json秒的体无完肤,他们想建立有秩序可用的服务和调用方式。然后,被时代淘汰了。这就能说明他们的这种封装的思路发生了偏差,他们都没在第一线搬过砖,没有充分的实践,就提出了这些规范和标准。但是,从我偶尔看到的一些JDK源码,或者是C++标准库源码,我又叹服这群人也是天才,在计算机专业方面我实在自愧不如。可能正是因为他们才华横溢,身居庙堂之上,才没法了解到底层搬砖coder们的真正需求和要解决的问题。
现代的java可以适当的向脚本语言靠近,java拥有众多优秀的库和工具,但是臃肿的语法一直被诟病。现在java8已经发布两年多了,虽然很多地方还在用java7,但是大势所趋。
RESTAPI风格的库Spark,NotORM风格的jOOQ和Speedment,方便简洁的Lambda表达式。丰富的StreamApi。java完全有能力写出nodejs一样直观易懂的代码。也比nodejs安全可靠百倍!
package com.xsdota.api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import spark.Route;
import static spark.Spark.post;
/**
* Created by xiaos on 16/10/27.
*/
public class Student extends BaseApi{
private static final Logger logger = LoggerFactory.getLogger(Student.class);
public Student() {
Route hello = (req,res)->{
String name = req.params(":name");//get路径参数
String age = req.queryParams("age");//get查询参数
return formatJson("hello "+name+" "+age,300,"code is 300");
};
Route fuck = (req,res)->"fuck";
getJson("/student/hello/:name",hello);
getJson("/student/fuck",fuck);
post("/student/post",(req,res)->{
String name = req.queryParams("name");//post下优先为查询参数 若无查询参数则为body下的url-encoding的键值对
return "post "+name;
});
uploadFile("/uploadImage","uploaded_file","./src/main/resources/public/upload/d.txt");
getJson("/student/test",(req,res)->"hello this is test");
}
}