首页 > 代码库 > Struts2技术内幕 读书笔记一 框架的本质
Struts2技术内幕 读书笔记一 框架的本质
本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书。笔记中所用的图片若无特殊说明,就都取自书中,特此声明。
什么是框架?我们为什么要用框架?框架能给我们带来什么?
这几个问题既简单又复杂。说它简单,是因为框架确实存在在软件设计中,说它复杂是因为我们现在所使用的框架不论是spring还是struts都是经过多年的发展,其内部已经十分庞杂了,因此想一句话两句话说清楚一个框架就不是那么简单了。
OK,既然现有的框架都很复杂,那我们就找一个简单的:
我们仔细回想一下,我们所写的java代码首先就得得到java的语法支持和基本功能的api支持(例如上面的str.length()就是返回字符串的长度)。再换句话说我们所写的代码都依赖一个最最基本的条件:
jdk所提供的api支持***
如果一个需求被重复1000次,那么我们就需要重复1000次针对需求的解决方法。如果一个项目里我们有1000个地方都需要判断字符串是否为空,当然上面的代码完全可以,不过我们是不是能够对它做一点点重构呢?
1 可读性
只要是学过英语的朋友,应该都知道empty的意思吧。对"判断字符串是否为空"这个功能点,我们抽象出一个方法,名字就叫做isEmpty,不就是见名知义吗?相信一些有经验的程序员看到isEmpty的方法名就能想到内部的实现过程。我们再看看未重构前的代码,如果在一个七八百行的代码片段里,我们最初写的那部分代码是不能引起我们思维的停顿的。而后者作为一个提炼出来的方法,可以给我们一个直观的提示。
2 可扩展性
这个就更简单了,如果对"判断字符串是否为空"这个功能点做一下改变,之前的方法需要改1000次,而抽取出逻辑合成一个新的方法就只需要改一次。
其实上面的问题,很多计算机前辈都已经预见到了,在Apache的common-lang.jar里面就有类似的代码。如果我们想使用Apache的功能扩展,只需要将上面的那个jar包加到CLASSPATH中即可。
上面的道理很简单,大家都干过,但就是这个简单的例子,告诉了我们一个深刻的道理:
每当我们把一个jar包加入CLASSPATH中,就等于获得了jar中所有对jdk的额外支持。
我们所有的程序,其内在结构如下:
最底层的就是jvm,它提供了java程序运行的基础环境;再之上就是jdk,它是构建在jvm上的基本的对象行为的定义。再之上就是jar包层次,通过上图大家也能看到,jar包层次里面似乎是一块一块的砖头,它们间是可区分的,但是这些砖头合在一起构成一层,为最上层的我们写的应用程序服务。
看eclipse里面CLASSPATH的截图,我们可以看到我们所熟悉的框架都是以一个一个的jar包的形式被加载到程序运行所依赖的CLASSPATH中的。
因而我们又可以得出一个结论:
框架只是一个jar包而已,其本质是对jdk的功能扩展。
那么我们为什么要把jar包加入CLASSPATH呢?回想我们最开始说的字符串判空,我们的初衷就是:
解决中某个领域的开发中遇到的困境。
因而,框架存在的意义:
是在某个领域内,解决问题。
所以,对我们程序员来说,千万不要为了学框架而学框架,我们应该抱着为了解决某些问题的态度来学习框架。
这篇只是一个预热,下面我们再谈谈web开发的一些"基础知识"。
什么是框架?我们为什么要用框架?框架能给我们带来什么?
这几个问题既简单又复杂。说它简单,是因为框架确实存在在软件设计中,说它复杂是因为我们现在所使用的框架不论是spring还是struts都是经过多年的发展,其内部已经十分庞杂了,因此想一句话两句话说清楚一个框架就不是那么简单了。
OK,既然现有的框架都很复杂,那我们就找一个简单的:
if(str==null || str.length()==0){ //...你的逻辑 }上面这段代码,无论是语法还是功能都很简单:判断一个字符串是否为空。
我们仔细回想一下,我们所写的java代码首先就得得到java的语法支持和基本功能的api支持(例如上面的str.length()就是返回字符串的长度)。再换句话说我们所写的代码都依赖一个最最基本的条件:
jdk所提供的api支持***
如果一个需求被重复1000次,那么我们就需要重复1000次针对需求的解决方法。如果一个项目里我们有1000个地方都需要判断字符串是否为空,当然上面的代码完全可以,不过我们是不是能够对它做一点点重构呢?
public abstract class StringUtils{ public static boolean isEmpty(String str){ return str.length()==0 || str==null; } }在我们的代码里要使用上面的功能,代码如下:
if(StringUtils.isEmpty(str)){ //...你的逻辑 }我们对代码做了一次小小的改进,可就是这个改进,让我们的代码有了两个良好的品质:
1 可读性
只要是学过英语的朋友,应该都知道empty的意思吧。对"判断字符串是否为空"这个功能点,我们抽象出一个方法,名字就叫做isEmpty,不就是见名知义吗?相信一些有经验的程序员看到isEmpty的方法名就能想到内部的实现过程。我们再看看未重构前的代码,如果在一个七八百行的代码片段里,我们最初写的那部分代码是不能引起我们思维的停顿的。而后者作为一个提炼出来的方法,可以给我们一个直观的提示。
2 可扩展性
这个就更简单了,如果对"判断字符串是否为空"这个功能点做一下改变,之前的方法需要改1000次,而抽取出逻辑合成一个新的方法就只需要改一次。
其实上面的问题,很多计算机前辈都已经预见到了,在Apache的common-lang.jar里面就有类似的代码。如果我们想使用Apache的功能扩展,只需要将上面的那个jar包加到CLASSPATH中即可。
上面的道理很简单,大家都干过,但就是这个简单的例子,告诉了我们一个深刻的道理:
每当我们把一个jar包加入CLASSPATH中,就等于获得了jar中所有对jdk的额外支持。
我们所有的程序,其内在结构如下:
最底层的就是jvm,它提供了java程序运行的基础环境;再之上就是jdk,它是构建在jvm上的基本的对象行为的定义。再之上就是jar包层次,通过上图大家也能看到,jar包层次里面似乎是一块一块的砖头,它们间是可区分的,但是这些砖头合在一起构成一层,为最上层的我们写的应用程序服务。
看eclipse里面CLASSPATH的截图,我们可以看到我们所熟悉的框架都是以一个一个的jar包的形式被加载到程序运行所依赖的CLASSPATH中的。
因而我们又可以得出一个结论:
框架只是一个jar包而已,其本质是对jdk的功能扩展。
那么我们为什么要把jar包加入CLASSPATH呢?回想我们最开始说的字符串判空,我们的初衷就是:
解决中某个领域的开发中遇到的困境。
因而,框架存在的意义:
是在某个领域内,解决问题。
所以,对我们程序员来说,千万不要为了学框架而学框架,我们应该抱着为了解决某些问题的态度来学习框架。
这篇只是一个预热,下面我们再谈谈web开发的一些"基础知识"。
Struts2技术内幕 读书笔记一 框架的本质
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。