关闭

做Java开发这一年

发表于:2014-10-11 09:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:marshal-m    来源:51Testing软件测试网采编

  从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。通过这一年时间也有些感触,想从几个面比较一下这两个平台。希望能做到客观公正。
  语言
  我原来是使用C#语言的,和现在的Java语言相比,现在的Java语言语法就停留在C# 2.0这个年代。语法结构都非常传统,中规中矩。很突出的一点是,因为缺少对闭包的支持,有些用C#很容易做到的,用Java需要写很多废话代码。
  前几天InfoQ上发表了一篇英国卫报逐步采用Scala替换Java的文章里一句话用的很好:看Java的代码很容易让你只见树木,不见森林。因为为了实现某个功能,你需要太多的支撑代码,而实现功能的关键代码却迷失了。
  举个例子:我需要一个排好序的用户列表,排序的依据是用户名字。很简单的需求对不。自然的代码肯定是这样的:
  IList<User> users = …
  users.OrderBy(user => user.Name);
  而如果用Java实现同样的功能你可能要这样写:
  List<User> users = …
  Collections.sort(users,new Comparator<User>() {
  public int compare(User left, User right) {
  return left.getName().compareTo(right.getName());
  }
  });
  第一:没有扩展方法的支持,只有借助静态的辅助类
  第二:没有闭包的支持,非要写个难看的匿名类
  其实我们只需要一个OrderBy,一看就明白,但现在多了这么多“无用”的代码,反而核心的价值(order by)却显得不那么重要了。这还是一个很简单的例子,在实际的项目中你会为此付出更多的代价,你要写出一堆味同嚼蜡的代码才能实现你想要的那个功能,而那个功能其实是很显而易见。
  所以在语言层面,Java没有任何亮点,只觉得罗里罗嗦。
  关于语言层面的比较,老赵写过很多,而且非常精彩,建议去欣赏一下。
  不过Java也有那么很少几个有点意思的小东西:比如静态导入(脑袋提醒,这东西很早就在VB里出现了)、以及Java对Annotation的特殊支持让我们可以做一个更有意思的事情。
  概念满天飞
  做Java以来,让我感触最深的是在Java世界里概念满天飞。ORM,IOC,AOP,这几个在.NET的世界里也有,但没见过这么浓的,但是如果你做Java应用,你不熟悉这几个你都不好意思出去跟人打招呼,所以除了学习Java本身外还有一大堆开源框架等着你研究。
  还有什么View Model,Presentation Model,Validator,BRO(Business Rule Object),BPO(Business Process Object),BDD。关键是不仅是概念上存在这样的名词,它还大量的出现在代码里。代码里将概念描述得淋漓尽致,还规规矩矩。或许我土老帽了,我开发.NET三年有余,从来没整这些玩意儿。但是我一点也不怀疑我的代码难以阅读,难以维护。
  配置文件,你能再多一点么
  我超级厌恶Spring的配置文件(虽然你说这只是个框架,但貌似Java社区有这个趋向)。虽然Spring现在也增加了注解(Annotation)的支持,但是还有那么一些知道的和不知道的原因,项目中存在大量的配置文件。而且为了“模块性”,一个小小的配置文件又包含有几个配置文件。有配置controller的,有配置DAO的,有配置service的。额,还有那该死的Hibernate的hbm文件。我想,系统的复杂性就是这么一点一点的堆积而来的。
  ASP.NET的配置文件一度也有变得更臃肿的趋势,但最后还是大大瘦身(.NET 4.0里默认的web.config很小了)。而且Attribute在.NET的第一个版本就出现了,很多可配置的东西都提供了Attribute的API和XML的API,所以没有历史遗留包袱。
  开源,这个我喜欢
  Java里的开源软件远远超过.NET的(这可能跟微软有一定的关系吧)。如果你想完成一项工作,总会有一个开源软件适合你。比如我们要做一个定时调度的任务,马上就有Quartz跑到了你的视野,你只需实现几个接口,然后在配置文件里配置一下(又是该死的配置文件),又比如你苦于在Java里没法像C#里那样用Lambda,马上有个跟你一样想法的人开发了一个lambda4j(Java人有个说法是:语言不足类库来补,不过Java这个语言太不足了,所以有的时候类库补也补不好)。你可以在琳琅满目的开源框架和开源类库里寻找一个最合适的,然后打开这个潘多拉魔盒。最主要的是她还是开放的,你不仅可以学习其代码思想,如果你发现有问题你甚至可以提交代码,那种成就感我倒是在开发.NET时没有感觉到。比如你要开发高性能服务器,在.NET里还没见过这类的开源项目,可Java里你可以学习Netty,可以学习Mina,你甚至可以根据自己具体的业务场景,对这些开源软件进行适当的修改。当然,你可以说思想是一样的,这倒是不错。但因为IO模型在Java里和.NET里并不一样,所以还是有很多不同的(当然我觉得.NET的异步IO更容易使用,Java的NIO那是什么狗屎一样的API啊)。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号