仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1912|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA教程之8个改良Java遗留体系的技能仓酷云

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:32:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,你没看错,就是这个标题:即便是Java体系也会酿成“遗留”体系。每当我们想起遗留体系时,我们就会想起那些存储着大批文件数据并只能用COBOL会见的嘎吱嘎吱作响的年夜型主机。但现实是,Java已是一门具有15年汗青的开辟言语,用Java写就的不计其数的体系已乐成运转了十年乃至更久。
因而,思索到很多读者城市事情在某个遗留的Java体系上,我依据本人的履历专程攒了这八个技能,来匡助团队更新和激活他们的遗留Java使用。
技能1:利用剖析器

剖析器供应了任何其他工具没法供应的功效,从而可以深切反省你的使用。假如你的使用已有一年多工夫没有被剖析过了,那末它一定会有年夜块年夜块的低效代码,埋伏在某个暗中的角落。市情上有很多分歧的或收费或贸易的剖析器。关于CPU剖析,我最喜好的是JProfiler,由于它充足壮大能剖析出年夜多半成绩,同时易于设置,特别当你利用它内建的设置导游的时分。而诊断内存成绩时,我最亲睐的工具是EclipseMemoryAnalyzer,由于它利用的是纪录在磁盘上的索引,而不是把全部堆的快照放到内存中。
一般来讲,埋没着的易耗尽CPU的代码包含低效的hashCode()大概equals()办法(在卷动JTable时和利用Javacollection类时,它们会被挪用上百万次),和一些出人意表的出自Sun之手的低效类,好比SimpleDateFormat。
剖析器大概会分明地让你的使用变得很慢,以是你必定要在测试情况中利用它。
技能2:监控数据库利用情况

剖析器除能够显现你的使用过分占用CPU时钟的细节,它们也能够对你的使用在哪些中央长工夫做了数据库的操纵给出提醒。但更好的用来监控数据利用的工具,是像ProactiveDBA大概HPDiagnostics,大概任何其他来自于你的数据库产物厂商的工具。这些工具能够告知你,哪些代码做了长工夫的SQL挪用,和哪些代码在短工夫内对统一行做了屡次挪用。来自数据库厂商的工具还能够匡助发明那些堵塞了其他挪用的查询;固然在我的履历里,如许的堵塞成绩基础不外是些复杂的、低效的SQL用法。
我写了一个新的工具叫做jdbcGrabber,它可让你以可视化的情势形貌出哪些代码正在会见哪些数据表。经由过程这类可视化出现,你能够很简单发明那些屡次会见数据库中分歧部分信息的代码,从而将其调剂为一次兼并的哀求。
技能3:构建和部署主动化

很多遗留体系缺少一种完整主动化的体例,来构建它们的代码,更不必说主动部署了。主动化构建和部署关于进步遗留体系开辟者的效力来讲,是一种复杂间接而又低风险的体例,并且一般不必要修正代码。
没有主动化的构建和部署历程,新的开辟者不能不从头创造轮子,跟那些先辈们早就奋斗过的一样成绩从头来斗,并且每次反复的部署成绩产生,开辟者城市创造出分歧的办理计划。
固然Maven是一款出色的并且利用普遍的构建工具,但它对你的源码树布局和库依附有着刚强的请求,以是把它用在遗留使用中会有点坚苦。但充足优异的Ant应当更容易于利用,由于它处置起遗留代码布局加倍天真,也更简单部分接纳,而不是通盘接纳。
技能4:主动化你的操纵并利用JMX

别的一种进步遗留使用的效力但不会带来修正代码的风险的体例是,改良它的运维。很多外部开辟的企业体系,一样平常都必要大批出人意表的手把手引导和保护,即便如许是不该该的。
既有的Java功效能够经由过程利用JMX很简单地表露给卖力运营的人们,而不会带来负面影响。很多开辟者对JMX对照熟习是由于,他们用JMX来跟JBoss和WebLogic如许的使用服务器举行交互,但他们不分明把JMX用在他们本人的使用中是何等便利。任何Javaclass都能够经由过程JMX表露出来,几近没甚么负面效果,也没有甚么风险。
好比,假如你的使用有一个当地的静态HashMap作为cache,你就能够经由过程JMX来表露功效,从而很简单地扫除谁人cache。
一旦使用经由过程JMX表露,运维团队大概开辟者就能够以优秀的体例来操纵使用,无需间接会见运转着使用的呆板。
技能5:创立单位测试

一旦你对遗留体系的修正损坏了某个功效,你所面对的最年夜停滞之一就离开了。一些工具传播鼓吹能对代码举行反向工程,并为其创立单位测试,但我对这些工具没有太多的信念。要想有充足的信念,你的单位测试切实其实掩盖了你希冀它们掩盖的代码,你就不能不亲身创立它们。
很侥幸,为遗留代码创立单位测试并没有一入手下手感到上的那样坚苦。我利用了MichaleFeathers在WorkingEffectivelywithLegacyCode一书中解说的“遗留代码修正算法”:

  • 确认修正点
  • 找出测试点
  • 冲破依附
  • 编写测试
  • 修正偏重构
无效利用这个算法的秘诀在于第3点:冲破依附。有良多手艺能够用来干这个,但个中年夜多半都是关于移除静态援用和在接口和facade下埋没内部援用和庞大代码。一旦你具有如许冲破依附的感到了,打仗遗留代码就不会是一件让你心惊肉跳的事变了。
技能6:杀逝世无用代码

固然无用代码大概看起来有害,但它们实践上常常会是无声的杀手。缘故原由在于只需无用代码还在代码库中,卖力保护的程序员就不会十分确信,代码是真的无用仍是只是看起来无用。感觉过前几回修正所带来的疾苦的保护者都晓得,即便是静态代码剖析也不克不及证实代码是真的无用了。好比,十年前一些伶俐的程序员大概会经由过程数据库中的字符串值来驱动Javareflection挪用营业逻辑(别笑,我不止一次看到过如许)。
因而,杀逝世无用代码使用是第一优先级的义务。固然Emma一般被以为是一种单位测试掩盖工具,但它能够用来侦测无用代码。当你把Emma注进到JVM中,它就能够追踪到哪些代码实行了,哪些没有。在你的开辟情况中,把Emma和一个完全的测试周期相分离利用,你就会晓得哪些代码在世仍是逝世了。
技能7:接纳一种“依从”体例构建代码

遗留使用不成能一次清算终了。在实际中,开辟团队必需使用任何一次时机,来改良遗留代码。但很多团队对今朝代码的情形都倍感扫兴,而没法思索他们事实该怎样做。“代码其实太糟了,”开辟者说。
冷淡是最年夜的毛病。遗留使用之以是还存在世是由于,它们仍然有效,并且和一切有效的使用一样,他们的用户会持续想要修正它们。假如团队捉住时机界说一个能够到达的愿景:但愿使用会是甚么模样,然后做出慢慢增量的改动,他们就会离间隔终极的愿景更进一步。
没有如许的愿景,团队的每一个成员就会做出任何他/她所以为最准确的事变。一团体会利用SpringJdbcTemplate而另外一团体会入手下手利用iBATIS/MyBatis。固然每一个人都真正希冀改良这个使用,但现实上他们会让事变变得更糟,由于他们是在分歧的偏向上使力,使已庞大的布局加倍凌乱。
技能8:晋级你的JRE

当我告知一些团队Sun(如今是Oracle)早在2009年11月就已传播鼓吹不在持续对JDK1.5的撑持时,他们仍旧以为惊奇不已。这不单单是立即要晋级JRE到1.6的事变。那些历经劫难的团队,还记得从1.1晋级到1.2大概1.4晋级到1.5时所产生的统统,他们大概对如许的晋级还感应夷由。但我的履历是,如许的晋级会很光滑,并且会给使用带来一次明显的收费的功能奔腾。别的,JDK1.6还带来很多有效的、收费的运维和剖析工具,来匡助诊断那些你这些年一向备受困扰的渣滓接纳成绩。
八个技能以外

下面经心选择出来的每一个技能,基础都是易于接纳,并风险绝对要低。但另有良多其他的体例来改良遗留使用,让使用改良后看起来就像是新的一样。
起首,如今的开放源代码库生态体系给已往年夜部分的遗留Java体系带来了发火。很多遗留体系会有土生土长、完整自界说的各类子体系:事情流引擎、划定规矩引擎、模板引擎、用户接口框架和对象干系映照层等等。这些土生土长的组件中的恣意一个,都能够被一个收费的开放源代码库交换失落,并且加倍智能并充足健壮。如许一对一的交换能够很年夜水平上打消一次全体交换所带来的保护上的坚苦。
其次,是时分好悦目看你本人的遗留使用的计划成绩了。固然改动计划远比仅仅晋级JRE要庞大很多,但它也会给你的投资带来更年夜的报答。关于大批逻辑都存储在数据库存储过程当中的使用,能够思索把那些逻辑进步到使用层,从而能够受害于集群服务器,并更简单举行单位测试。假如一个计划把暗示层跟营业逻辑层绑定得太紧,那你就能够把它们分隔,如许增添新潮的iPhone界面也会很简单完成。在各个子体系之间的同步伐用也能够转换成异步、基于动静的挪用,这在弹性和功能上城市是主要的改良。
最初,为了让你从Java遗留使用中多活两到四年,我倡议你雇佣一个对如许体系有履历的专家。就像一个内科大夫做精巧的年夜脑手术一样,有履历的专家一般能够为遗留体系中的成绩找到更好的办理计划,从而带来更多的优点和低风险。
关于那些希冀吸收更深内容的读者,我倡议这本我读过的最好的关于遗留体系的书:MichaleFeather的WorkingEffectivelywithLegacyCode。任何事情在遗留体系上的开辟者城市从这本书中受害。
关于作者
TimCull是一个有履历的软件开辟职员和架构师。作为ThedwickLLC(一家专注于高条理软件开辟的佳构软件征询公司)的开创人,他已匡助过良多客户扩大并加强他们的遗留Java体系,并回护他们的手艺投资。Tim最新的宣布包含他的blog(http://www.thedwick.com/blog)和一篇在IEEE软件(必要定阅)上的文章。更多信息,请接洽feedback@thedwick.com或会见http://www.thedwick.com。
检察英文原文:EightQuickWaystoImproveJavaLegacySystems
来自:http://www.infoq.com/cn/articles/java_legacy_systems

首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
小魔女 该用户已被删除
沙发
发表于 2015-1-21 09:36:53 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
飘灵儿 该用户已被删除
板凳
发表于 2015-1-30 13:48:20 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-6 12:59:57 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
不帅 该用户已被删除
5#
发表于 2015-2-16 04:48:46 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
因胸联盟 该用户已被删除
6#
发表于 2015-3-4 23:49:55 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
莫相离 该用户已被删除
7#
发表于 2015-3-9 21:25:46 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-10 17:46:23 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
蒙在股里 该用户已被删除
9#
发表于 2015-3-11 08:28:34 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
乐观 该用户已被删除
10#
发表于 2015-3-12 02:10:54 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
精灵巫婆 该用户已被删除
11#
发表于 2015-3-19 17:31:46 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
深爱那片海 该用户已被删除
12#
发表于 2015-3-23 18:04:04 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
谁可相欹 该用户已被删除
13#
发表于 2015-4-1 12:10:17 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
爱飞 该用户已被删除
14#
发表于 2015-4-21 20:34:24 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
老尸 该用户已被删除
15#
发表于 2015-4-22 06:21:08 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再现理想 该用户已被删除
16#
发表于 2015-4-25 12:58:24 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
活着的死人 该用户已被删除
17#
发表于 2015-5-6 02:11:49 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
若天明 该用户已被删除
18#
发表于 2015-5-7 15:07:39 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
冷月葬花魂 该用户已被删除
19#
发表于 2015-6-20 21:46:26 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
admin 该用户已被删除
20#
发表于 2015-6-22 17:54:29 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-1 06:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表