`
isiqi
  • 浏览: 15949734 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java初学者应该知道和注意的一些知识

 
阅读更多

越来越多人开始使用Java,但是他们大多数人没有做好足够的思想准备(没有接受OO思想体系相关培训),以致不能很好驾驭Java项目,甚至 导致开发后的Java系统性能缓慢甚至经常当机。很多人觉得这是Java复杂导致,其实根本原因在于:我们原先掌握的关于软件知识(OO方面)不是太贫乏就是不恰当,存在认识上和方法上的误区。

软件的生命性

  软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构的原由,反复强调都不过分。

  一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。

  目前很多人对软件的思想还是焦点落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构不灵活不能方便加入,死路一条。   正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如ofbizcompiere和slide也存在这方面陷阱,貌似非常符合胃口,其实类似国内那些几百元的盗版软件,扩展性以及持续发展性严重不足。

  那么选择现在一些流行的框架如Hibernate、Spring/Jdonframework是否就表示基础架构打好了呢?其实还不尽然,关键还是取决于你如何使用这些框架来搭建你的业务系统。

存储过程和复杂SQL语句的陷阱

  首先谈谈存储过程使用的误区,使用存储过程架构的人以为可以解决性能问题,其实它正是导致性能问题的罪魁祸首之一,打个比喻:如果一个人频临死亡,打一针可以让其延长半年,但是打了这针,其他所有医疗方案就全部失效,请问你会使用这种短视方案吗?

  为什么这样说呢?如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间J2EE应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?只能回到过去集中式数据库主机时代。现在软件都是面向互联网的,不象过去那样局限在一个小局域网,多用户并发访问量都是无法确定和衡量,依靠一台数据库主机显然是不能够承受这样恶劣的用户访问环境的。(当然搞数据库集群也只是五十步和百步的区别)。

  从分层角度来看,现在三层架构:表现层、业务层和持久层,三个层次应该分割明显,职责分明:持久层职责持久化保存业务模型对象,业务层对持久层的调用只是帮助我们激活曾经委托其保管的对象,所以,不能因为持久层是保管者,我们就以其为核心围绕其编程,除了要求其归还模型对象外,还要求其做其做复杂的业务组合。打个比喻:你在火车站将水果和盘子两个对象委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,合理吗?

  上面是谈过分依赖持久层的一个现象,还有一个正好相反现象,持久层散发出来,开始挤占业务层,腐蚀业务层,整个业务层到处看见的是数据表的影子(包括数据表的字段),而不是业务对象。这样程序员应该多看看OO经典PoEAA。PoEAA 认为除了持久层,不应该在其他地方看到数据表或表字段名。

  当然适量使用存储过程,使用数据库优点也是允许的。按照Evans DDD理论,可以将SQL语句和存储过程作为规则Specification一部分。

Hibernate等ORM问题
  现在使用Hibernate人也不少,但是他们发现Hibernate性能缓慢,所以寻求解决方案,其实并不是 Hibernate性能缓慢,而是我们使用方式发生错误:

  “最近本人正搞一个项目,项目中我们用到了struts1.2+hibernate3, 由于关系复杂表和表之间的关系很多,在很多地方把lazy都设置false,所以导致数据一加载很慢,而且查询一条数据更是非常的慢。”

  Hibernate是一个基于对象模型持久化的技术,因此,关键是我们需要设计出高质量的对象模型,遵循DDD领域建模原则,减少降低关联,通过分层等有效办法处理关联。如果采取围绕数据表进行设计编程,加上表之间关系复杂(没有科学方法处理、侦察或减少这些关系),必然导致系统运行缓慢,其实同样问题也适用于当初对EJB的实体Bean的CMP抱怨上,实体Bean是DomainModel持久化,如果不首先设计DomainModel,而是设计数据表,和持久化工具设计目标背道而驰,能不出问题吗?关于这个问题N多年就在Jdon争论过。

  这里同样延伸出另外一个问题:数据库设计问题,数据库是否需要在项目开始设计?如果我们进行数据库设计,那么就产生了一系列问题:当我们使用Hibernate实现持久保存时,必须考虑事先设计好的数据库表结构以及他们的关系如何和业务对象实现映射,这实际上是非常难实现的,这也是很多人觉得使用ORM框架棘手根本原因所在。

  当然,也有脑力相当发达的人可以实现,但是这种围绕数据库实现映射的结果必然扭曲业务对象,这类似于两个板块(数据表和业务对象)相撞,必然产生地震,地震的结果是两败俱伤,软的一方吃亏,业务对象是代码,相当于数据表结构,属于软的一方,最后导致业务对象变成数据传输对象DTO, DTO满天飞,性能和维护问题随之而来。

  领域建模解决了上述众多不协调问题,特别是ORM痛苦使用问题,关于ORM/Hibernate使用还是那句老话:如果你不掌握领域建模方法,那么就不要用Hibernate,对于这个层次的你:也许No ORM 更是一个简单之道: No ORM: The simplestsolution

-------------------------------------------------------------------------------------------------

移动开发者大会:Android开发者将越来越赚钱 海量Android教程、开发资料和源码

10类最急需IT人才:Java开发者居首给将成为“Android高手”的10个建议

成为Java高手的25个学习目标--非常经典 Android 4.1果冻豆新特性详解

芯片巨头海思和展讯:给中国芯片业带来信心 海量经典Java教程、学习资料和源码

Java侵权诉讼Google获胜,Android厚积薄发 面试必备:Android笔试总结

Android高手必须掌握的28大内容和10个建议 Android平台研发人才缺口30万

Android开发环境安装和配置步骤详细图解 2012国内移动App开发者大调查结果

Windows 7下搭建android开发环境步骤图解 Android 4.0的30个突出的新特性

Android高手要经过的6个阶段和6个境界 linux下搭建Android开发环境步骤

从IT菜鸟变为“IT骨干开发者”的11个建议 程序员编程技术迅速提高的终极攻略

2012世界各国人均GDP排名,中国超泰国 2012年全国各省平均工资排行

2012年中国大学高校排行榜(580强排名) 中国各省市面积和人口数量排名

中国百万开发者大调查:程序员的薪水不错 Java高手需要越过的10座高山

周立功谈嵌入式:我的25年嵌入式生涯 Android和Java语言的异同和关系

华为中国区手机销量达千万,80%为智能机 谷歌Android碎片化严重

2012年中国各省GDP和人均GDP排名 90后就业“钱景”:IT仍是最佳选择

2012全球城市竞争力500强,69个中国城市上榜不要做浮躁的软件工程师

2012年世界500强,79家大陆香港台湾公司上榜名单 给IT新兵的15个建议

美国知名科技公司入门级软件工程师的薪水排名回顾Java经过的风风雨雨

71道经典Android面试题和答案--重要知识点都涉及到了

高校应届毕业生“IT业”收入最高,Android技术最热门

分享到:
评论

相关推荐

    java初学者要注意的

    初学java者要注意的知识点,这里是本人收集的一点,希望大家可以相互交流,学习

    Java初学者入门教学

    13.16.2 事件和接收者类型 13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 ...

    初学者学习java

    在第二章中,全面地讲解Java的基本语法知识,对基本语法的讲解也不是泛泛而谈,而是在其中贯穿各种实际应用中的巧妙用法和注意事项。在第三章和第四章中,透彻系统地讲解了面向对象的思想和应用。在以后的章节中,用...

    java实战练习+ 从”helloworld"到“大型病毒传染”难度“ + Java初学者 + Java习题

    1. 该资源适合刚刚接触java的同学们,通过此练习题,可以更加深刻的理解java语法的内涵,同时熟悉java的使用方法。 2. 在做acm题不能有很好效果的情况下,这个是很好的选择。 3. 题目考察点含有( 类,继承,多态,...

    整理编写的几个Java小游戏合集涵盖了JAVA多方面的知识点.zip

    用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载使用。用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载使用。用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载...

    java学习笔记 初学者必读

    14.6. 使用互斥锁的注意事项 14-44 15. 十四•标准I/O流与文件 15-46 15.1. 对文件的操作 15-46 15.2. 处理跨平台性 15-46 15.3. 对象的序列化接口 15-47 15.4. I/O流基础 15-47 15.5. 流的分类 15-47 15.6. I/O输入...

    Java就业班体系结构文档,Java核心知识,提升Java开发技能、理解Java核心技术及应用场景

    适用于初学者和有一定经验的开发者,本资源适用于那些想要从零开始学习Java编程或者进一步提升自己的Java技能的人群。无论是求职准备、技术提升还是项目开发,本资源都能为学习者提供实用的指导和参考。 通过阅读...

    java基础知识总结(经典)

    主要介绍了java的基本语法,设计模式,线程,并且在实际开发中的注意事项,非常适合初学者。

    Java实现五子棋游戏(人机对战)

    本程序适用于java初学者巩固类与对象、事件响应、awt包中各种工具的相关概念以及对逻辑能力的锻炼 需要注意的有: ①要加入java界面的重绘(基本原则) ②由于玩家需要通过鼠标点击,计算机响应出棋子的位置,但...

    java解惑(包括pdf和答案)

    结合实例全面讲解java基础,让初学者掌握java知识的同时,学习使用技巧和注意事项

    十年开发Java基础知识总结

    自己总结的java基础知识点,帮助初学者迅速上手: 1,明确需求。我要做什么?  2,分析思路。我要怎么做?1,2,3。  3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。  4,代码实现。用具体的java...

    明日知道.zip

    2. Java初学者: 对Java编程语言和相关技术有一定兴趣和基础的初学者。资源描述可以帮助他们了解Java项目开发所需的基本工具和技术,并为他们提供学习和实践的方向。 3. 软件工程师: 从事软件开发或工程管理的专业...

    java面试手册(逆袭)

    无论是初学者还是有经验的开发人员,都能从中受益匪浅。 手册内容包括对Java编程语言的深入解析,涵盖了语法、面向对象编程、多线程等核心概念。此外,对于与Java生态系统密切相关的框架,如Spring、Hibernate等,...

    校园管理系统源码.zip

    2. Java初学者: 对Java编程语言和相关技术有一定兴趣和基础的初学者。资源描述可以帮助他们了解Java项目开发所需的基本工具和技术,并为他们提供学习和实践的方向。 3. 软件工程师: 从事软件开发或工程管理的专业...

    企业门户网站.zip

    2. Java初学者: 对Java编程语言和相关技术有一定兴趣和基础的初学者。资源描述可以帮助他们了解Java项目开发所需的基本工具和技术,并为他们提供学习和实践的方向。 3. 软件工程师: 从事软件开发或工程管理的专业...

    网上淘书吧.zip

    2. Java初学者: 对Java编程语言和相关技术有一定兴趣和基础的初学者。资源描述可以帮助他们了解Java项目开发所需的基本工具和技术,并为他们提供学习和实践的方向。 3. 软件工程师: 从事软件开发或工程管理的专业...

    图书馆管理系统项目源码.zip

    2. Java初学者: 对Java编程语言和相关技术有一定兴趣和基础的初学者。资源描述可以帮助他们了解Java项目开发所需的基本工具和技术,并为他们提供学习和实践的方向。 3. 软件工程师: 从事软件开发或工程管理的专业...

    天下陶网络商城.zip

    2. Java初学者: 对Java编程语言和相关技术有一定兴趣和基础的初学者。资源描述可以帮助他们了解Java项目开发所需的基本工具和技术,并为他们提供学习和实践的方向。 3. 软件工程师: 从事软件开发或工程管理的专业...

Global site tag (gtag.js) - Google Analytics