做Java开发这一年ITeye - 娱乐之横扫全球

做Java开发这一年ITeye

2019-01-13 13:10:35 | 作者: 元冬 | 标签: 开发,代码,一年 | 浏览: 2348

做Java开发这一年 从上一年到现在,从.NET转向Java开发(仅仅由于项目原因,必定与渠道好坏没有联系)差不多有一年的时刻了。经过这一年时刻也有些感受,想从几个面比较一下这两个渠道。希望能做到客观公平。rnrn言语rn我原来是运用C#言语的,和现在的Java言语比较,现在的Java言语语法就停留在C# 2.0这个时代。语法结构都十分传统,中规中矩。很杰出的一点是,由于短少对闭包的支撑,有些用C#很简略做到的,用Java需求写许多废话代码。rnrn前几天InfoQ上宣布了一篇英国卫报逐渐选用Scala替换Java的文章里一句话用的很好:看Java的代码很简略让你只见树木,不见森林。由于为了完结某个功用,你需求太多的支撑代码,而完结功用的要害代码却迷失了。rnrn举个比方:我需求一个排好序的用户列表,排序的依据是用户姓名。很简略的需求对不。天然的代码必定是这样的:rnrnIList users = …rnrnusers.OrderBy(user = user.Name);rnrn而假如用Java完结相同的功用你或许要这样写:rnrnList users = …rnrnCollections.sort(users,new Comparator() rn public int compare(User left, User right) rn return left.getName().compareTo(right.getName()); rn rn);rnrn榜首:没有扩展办法的支撑,只要凭借静态的辅佐类rnrn第二:没有闭包的支撑,非要写个丑陋的匿名类rnrn其实咱们只需求一个OrderBy,一看就了解,但现在多了这么多“无用”的代码,反而中心的价值(order by)却显得不那么重要了。这仍是一个很简略的比方,在实践的项目中你会为此支付更多的价值,你要写出一堆味同嚼蜡的代码才干完结你想要的那个功用,而那个功用其实是很清楚明了。rnrn所以在言语层面,Java没有任何亮点,只觉得罗里罗嗦。rnrn关于言语层面的比较,老赵写过许多,并且十分精彩,主张去赏识一下。rnrn不过Java也有那么很少几个有点意思的小东西:比方静态导入(脑袋提示,这东西很早就在VB里呈现了)、以及Java对Annotation的特别支撑让咱们能够做一个更有意思的作业。rnrn概念满天飞rn做Java以来,让我感受最深的是在Java国际里概念满天飞。ORM,IOC,AOP,这几个在.NET的国际里也有,但没见过这么浓的,可是假如你做Java运用,你不熟悉这几个你都欠好意思出去跟人打招呼,所以除了学习Java本身外还有一大堆开源结构等着你研讨。rnrn还有什么View Model,Presentation Model,Validator,BRO(Business Rule Object),BPO(Business Process Object),BDD。要害是不仅仅概念上存在这样的名词,它还许多的呈现在代码里。代码里将概念描绘得酣畅淋漓,还规规矩矩。或许我土老帽了,我开发.NET三年有余,从来没整这些玩意儿。可是我一点也不怀疑我的代码难以阅览,难以维护。rnrn装备文件,你能再多一点么rn我超级讨厌Spring的装备文件(尽管你说这仅仅个结构,但形似Java社区有这个趋向)。尽管Spring现在也增加了注解(Annotation)的支撑,可是还有那么一些知道的和不知道的原因,项目中存在许多的装备文件。并且为了“模块性”,一个小小的装备文件又包括有几个装备文件。有装备controller的,有装备DAO的,有装备service的。额,还有那该死的Hibernate的hbm文件。我想,体系的复杂性就是这么一点一点的堆积而来的。rnrnASP.NET的装备文件一度也有变得更臃肿的趋势,但最终仍是大大减肥(.NET 4.0里默许的web.config很小了)。并且Attribute在.NET的榜首个版别就呈现了,许多可装备的东西都供给了Attribute的API和XML的API,所以没有前史留传包袱。rnrn开源,这个我喜爱rnJava里的开源软件远远超越.NET的(这或许跟微软有必定的联系吧)。假如你想完结一项作业,总会有一个开源软件合适你。比方咱们要做一个守时调度的使命,立刻就有Quartz跑到了你的视界,你只需完结几个接口,然后在装备文件里装备一下(又是该死的装备文件),又比方你苦于在Java里无法像C#里那样用Lambda,立刻有个跟你相同主意的人开发了一个lambda4j(Java人有个说法是:言语缺乏类库来补,不过Java这个言语太缺乏了,所以有的时分类库补也补欠好)。你能够在琳琅满意图开源结构和开源类库里寻觅一个最合适的,然后翻开这个潘多拉魔盒。最首要的是她仍是敞开的,你不只能够学习其代码思维,假如你发现有问题你乃至能够提交代码,那种成就感我却是在开发.NET时没有感觉到。比方你要开发高性能服务器,在.NET里还没见过这类的开源项目,可Java里你能够学习Netty,能够学习Mina,你乃至能够依据自己详细的事务场景,对这些开源软件进行恰当的修正。当然,你能够说思维是相同的,这却是不错。但由于IO模型在Java里和.NET里并不相同,所以仍是有许多不同的(当然我觉得.NET的异步IO更简略运用,Java的NIO那是什么狗屎相同的API啊)。rnrnIDErn搞开发的必定离不开IDE。.NET里的IDE名副其实的是Visual Studio了。不过我却觉得Visual Studio这几年现已离开发人员越来越远了,如同他要搞什么全生命周期的软件开发工具。所以不光臃肿,并且对开发人员并不是很友爱(当然,她的可视化规划器是无与伦比的,但我不觉得可视化规划器是什么开发人员的“利器”)。举两个比方:VS里许多运用组合快捷键。这样不只使得快捷键过长,难以回忆,并且还好难运用啊,你必须按两次,并且时刻不能距离太长。还有VS的重构功用,太弱了。rnrn在Java里有各式各样的IDE,有免费的,有收费的。我很喜爱的一个就是Intellij Idea。Idea给我的形象就是,她真的是在重视开发人员(写代码的)这个人物。一切的快捷键都很简略,好用好记。比方,大部分东西在Idea里能够运用Alt+Enter这个全能快捷键处理(这个快捷键是上下文感知的,在不同上下文中它知道要干什么)。rnrn再就是Idea对重构的支撑,假如你娴熟之后,做一项大的重构你都无需手动的去修正什么代码,直接依托IDE的支撑就能够完结,这在安全的重构里是很重要的一点,手动的去修正代码重构假如在测验不齐备的情况下危险是十分高的。rnrn当然VS也有许多十分好用的插件,能够进步开发功率。比方大名鼎鼎的Resharper就来自于Intellij Idea同一个公司,由这个插件你能够看到Idea是怎么重视写代码的人的功率。rnrnJVM vs CLRrn一般的,Java跑在JVM上,C#跑在CLR上。从技能完结上他们两不相上下,各有各的长处,咱们不能点评他们的好坏。只能说或许JVM在XXX上胜过CLR,CLR在XXX上胜过JVM。并且JVM和CLR有居多相似之处,大多数东西都能够在对方找到相应的东西。rnrn那么她们就无法比较了么?不是,经过一年的学习我表明我更喜爱JVM一点。rnrnJVM(在这里只假设是Oracle/Sun Hotspot JVM)暴露了许多的装备参数给开发人员。你能够经过这些参数间接地操控JVM的运转。就比方GC吧,JVM里有各种参数来操控各个代的巨细,还能够经过参数让JVM选用什么样的废物搜集战略。由于不同类型的运用:比方桌面的、服务器端得、内存小的等等不同类型的运用合适不同的废物搜集战略。而CLR在废物搜集上只给开发人员供给了Workstation(是否是concurrent GC,.net 4.0是background GC)/Server等很少的操控(不过也简直很少用到)。当然,假如你想最大化操控CLR你就只要自己Host CLR,然后调用Host API进行操控,可是那样难度高许多。rnrn我很情愿供认CLR是自适应的,她能主动的智能的识别出你的需求,然后主动的进行调整。不过我在这里首要想到的是,微软在这里扮演着保姆的人物。在你很小的时分,保姆能够在必定程度上维护你,免你遭到损伤。可是你不能永久生活在保姆的怀有里,假如你想变得更强壮你需求自己独自一人出去看看。rnrn注:这一节不是比较JVM和CLR,由于我没有那个才能。仅仅想从JVM和CLR所表现出来的差异来看看一些“看不见的东西”。rnrn开发人员rn上面首要谈了技能层面的东西。现在说说软件开发中的人。rnrn我现在地点的公司面试有个特色:会让面试者做一份家庭作业,然后让公司搭档Code Review。在这一年里我看了许多Java的代码,也看了许多C#代码。可是我悲伤的发现:rnrn1、尽管Java的也有烂代码,可是Java代码大多更留意代码的美感。www.dljgyy.com我们都十分留意挑选办法名,变量名,类名等。也十分情愿写一些小的,简略了解的办法,小的意图清晰的类。可我亲爱的.NET同行们,大多在这方面很随意。一个办法200行不算长,乃至一个功用就放到一个办法里完结了。我看呀看呀,都看不到止境。更甭说类责任单一了。rnrn2、测验 Java同学的代码大多有测验,尽管有的测验不怎么好,但最起码有那么几个测测中心功用。可是.NET代码呢?很难见到几个有测验的(莫非这是由于VS很晚才参加对Unit Test的支撑有关?)。我不是说必定要有测验,我仅仅描绘一下这么个现象。rnrn3、你也太随意了。我见到有那么几份.NET代码,我知道你创建了一个WinForm的项目,然后你却不把VS主动生成的那几个Form1.cs,Form1.resx给删掉。rnrn4、构建 从构建这个层面就更显出问题了,Java同学提交的代码大多有构建的脚本,无论是Ant仍是Maven,所以你只需求敲一个命令行,立刻能够看见人家的成果。而.NET同学的基本上都是sln文件。这一点不是说谁好谁坏的,由于我之前做.NET也从来没有主动构建脚本,我只想说两个社区有些不同。rnrn

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章