阅读更多
我的新书《Struts2技术内幕》终于上市了。
china-pub地址: http://product.china-pub.com/198891
当当网地址: http://product.dangdang.com/product.aspx?product_id=22577578
京东地址: http://book.360buy.com/10898511.html
卓越地址: http://www.amazon.cn/Struts2%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95-%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90Struts%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86-%E9%99%86%E8%88%9F/dp/B006P7V7IQ/ref=sr_1_1?ie=UTF8&qid=1324909766&sr=8-1
写一本书不容易,尤其是如果作者打定主意对读者负责的话,那就更不容易了。所以这本书的创作过程还是比较艰辛的。这个帖子不仅是一个上市告之,同时也是我自己的一个自评,希望对读者的阅读有一些启示和帮助。
书的整体结构分成3个主要部分:知识准备篇、核心技术篇和运行主线篇。
知识准备篇
这一篇以理论知识为主,并没有涉及到非常具体的Struts2的知识。因为在整个写作的过程中,我发现理论知识实际上比框架本身更为重要。而框架的设计理念的出发点实际上都是基于这些理论知识的。
第一章,主要讲和开发环境搭建有关的话题。这一章的内容对于相对有经验的程序员来说帮助不大,因为在这一章中提到的一些观点和内容都是在日常工作中的良好工作习惯的概括。我在这一章中所强调的内容核心是:
借助IDE的帮助对于开源框架进行源码调试,这是学习源码、阅读源码的一个最为重要的方法和学习途径。
第二章,主要讲和Web开发相关的概念性话题。这一章的内容非常重要,在我个人看来是本书的精华部分之一。
尤其是在第二章起始对于面向对象概念的一个分析,与大家在其他书中所经常看到的“封装、继承”这类的讲解完全不同,而是选取了一个独特的视角:对象的语法构成分析。除此之外,我在第二章中还给出了一些Web开发的基本概念和最佳实践。这些内容的目的都是帮助读者理顺整个Web开发的思路。
第三章,主要对Struts2的方方面面做一个概况介绍。这一章的内容比较基础,并不涉及到很具体的源码解析。我个人认为
对于Struts2的运行主线的划分以及宏观元素和微观元素的梳理应该能够起到一个提纲挈领的作用。
核心技术篇
这一篇主要涉及到Struts2运行所依赖的核心技术,内容涵盖有:Struts2中最常使用的一些设计模式、XWork的容器设计、OGNL相关的知识、XWork的设计原理和技术分析。这些技术主要围绕着两个Struts2的核心依赖展开:OGNL和XWork。虽然我们花了大量的篇幅在Struts2以外的地方,但是读者依然应该把这些内容看作是Struts2不可分割的组成部分。
第四章,选取了5种Struts2中最常用的设计模式进行分析。
从整本书的角度来看,这一章的内容应该是整书的败笔。因为设计模式本身并不是Struts2的核心内容,而且设计模式本身博大精深,也并不是本书的主要内容。其实我原本的目的是希望借助这些设计模式的讲解,告诉读者Struts2在选择实现模型的初衷到底是什么,但是写着写着就有点一发而不可收拾,虽然在每个设计模式中,我都刻意强调了设计模式与Struts2设计要点上的呼应之处,但是读者读起来还是会觉得非常乏味,有偏离主题之嫌。读者可以权且当作一种知识性的介绍来读。
第五章,话题转到了XWork的容器设计。XWork的容器是整个Struts2运行的基础,所以在核心技术的介绍中,我把XWork容器的设计要点放在了比较前面的章节进行讲解。这一章的内容比较深,涉及到了XWork最核心的容器实现,可以说是整本书中最难理解的部分。
不过其内部实现的源码分析部分,却是至今为止市面上所有资料(包括书籍和网络资料)中独一无二的。所以对于读者来说应该还算有一些现实价值。
这一章的缺点在于,由于某些概念性的东西要讲清楚实在不容易,所以我采取了一些个人的观点加以解释,而这些解释可能和这些概念本身所表达的意思有所出入。例如,在这一章有关“控制反转”和“依赖注入”的概念上,我并没有明确区分两者的差异,而是尽可能希望将两者同质化。希望读者在阅读的时候,抓住本质,而不要纠结在一些用词和概念表述上的差异。
第六章,主要向读者介绍OGNL的相关知识。
这一章的内容,是整本书中另外一个精华之处。我在写这一章时,也参考了网络上许多OGNL相关的教程,但是发现它们的最大问题是无法将OGNL提升到一个“Web开发过程中的重要依赖组件”的高度来进行说明。因此,我在写这一章时,首先就提出OGNL成为Struts2核心依赖的重要原因是它作为一个表达式引擎的不可或缺性。
这一章的另外一个特色是深入到了OGNL的源代码级别,对OGNL的API进行详细分析,这一点也是其他的参考书和网络教程所不具备的地方。
第七章和第八章,
是整本书最重要,也是最为精华的部分。这两章的内容涉及到的就是XWork框架的来龙去脉。其中,
第七章偏重理论分析;第八章偏重源码分析。第七章中有关请求-响应模式的实现分析,不仅是我对于第二章面向对象分析的一个补充,更是揭开了整个MVC框架的实现机理。因此这应该是本书中最为重要的部分。而第八章中,我采取了针对数据流、控制流以及他们之间的交互这三个不同的角度来进行源码角度的分析。应该说许多观点都比较新颖独特,读者可以和其他的章节相互借鉴。
运行主线篇
运行主线篇的内容就涉及到Struts2自身的运行主线了。读者或许会比较奇怪,虽然这本书的书名是《Struts2技术内幕》,实际上绝大多数的篇幅却没有在讲Struts2运行主线相关的内容。当然,这是由Struts2自身的设计理念决定的。这种解耦的思想,也体现在了整本书的讲解之中。
第九章,内容主要涉及到Struts2的初始化主线。这一章的内容实际上有一些核心知识的依赖,读者应该首先对第五章的内容有所了解之后再来看第九章。而第九章的特色在于,
我刻意地将源码进行的逻辑步骤划分,并对每个步骤的要点进行了详细的分析。
第十章,内容转到了Struts2的请求处理主线。这一章的内容实际上是第八章的“前传”,因为根据Struts2的设计理念,Struts2只负责与Web容器打交道的部分,而XWork才真正负责请求的实际处理。因此,
读者将这一章的内容与第八章对应起来看,会起到比较好的效果。
第十一章,这一章的内容不属于Struts2的运行主线,却是MVC模型的重要组成部分。这一章的内容以概念为主,
我希望向读者传递的信息是Web框架与浏览器交互的设计思路。因此,在这一章节中,我并没有像其他的网络教程那样纠结在一些具体的实现元素,例如Taglib上,而是将重点放在了蕴藏在实现背后的思想层面。
不过作为一个Web框架的重要组成部分,我却没有在书中对其中的Taglib的实现进行详细的分析,或许也是本书的一个不足之处。
第十二章,是一个非常重要的话题:框架的扩展机制。这一篇的内容相对简单,没有什么值得说的闪光点。主要因为这一章的内容与第五章和第九章的内容联系过于紧密,几乎是由于话题的重要性而单独列出来的一个章节,所以
读者在阅读时请体会设计上的思想而不是源码上的实现机制。
后续博客: 尚未完成的话题