日期:2014-05-18  浏览次数:20724 次

十年总结(14):从CS转向BS
对我过去感兴趣的朋友们,请看十年总结系列文章

---

上一篇关于重构的总结,引来了很多讨论,基本上大家能够达成共识,
1、重构是提高代码质量非常重要的手段之一
2、重构要有所节制,过犹不及
3、质量是一种意识

---

以前可能没有详细说过,03-04年,我们用JAVA所做的项目都是基于C/S架构的,
但04年第四季度,越来越多的新项目提出了B/S架构的要求,于是我们面临一次转型。

这次转型,又带来一场冲突。
原来早就说过,乐乐在04过后,就要移民澳洲了,所以他相当保守,
提出将现有系统改造成一个Applet,他认为这样最稳妥,工作量最少。

我一向比较激进,我觉得改造成Applet虽然时间短,但毕竟不是长久之计,
所以我建议一次到位,按J2EE架构重新设计开发。
但这样做,我们团队的人员储备不足,时间周期也会比较长,
我自己不熟悉J2EE,因此短期内很难做出令人信服的估算,因此田田决定采用乐乐的方案。

改造是很快完成了,但大家可以想象由完整的CS应用改造而来的Applet,在浏览器中运行是如何的慢。
性能的问题乐乐三番五次解决不掉,而他离开公司的日期越来越近,我从内心深处也不太愿意接手他的代码,
于是我再次建议另起炉灶,重新开发一套B/S系统。

这样,在交了一个多月的学费后,我开始重点招聘B/S人员。
由于受到04年自己所学的影响,我招聘的时候逢人必问懂不懂敏捷建模,
虽然当时连知道这个概念的人都相当少,但竟然被我碰到一个,他对敏捷建模、测试驱动开发都很熟悉,
而且对开源项目非常感兴趣(我们的产品中也用了大量开源的东西)。

这个人在公司呆了不到两个月就走了,我总结应该是我在B/S方面太弱,而且公司没有更强的人,他可能觉得学不到东西,
虽然干的时间不长,但他让我知道了Spring和Hibernate,也算是在B/S方面帮了我一把,我还是很感谢这个人。

初接触Spring,感觉挺新奇的,很喜欢背后的IoC思想,
还有Hibernate,也是其O/R Mapping的思想让我觉得受益匪浅,
不过让我感到头疼的是配置,总总觉得本来一件简单的事情,到了框架里,要拆散了在好多个地方做配置,
出了问题,总是不能一下子定位在哪里(受C/S开发的影响),一开始还经常有录入错误,搞得一个简单问题要DEBUG好半天。

可能有人会说用工具来简化配置,但我有些古怪,就是一样东西如果没有足够的信心,而只是照某种步骤去做,
心里就会患得患失,没有安全感。
况且对于我们这个刚刚组建的,没有高手的B/S团队,还是应该简单一些好。
于是,我决定放弃SSH架构,而直接采用Struts。


这一段时间的确是很有压力的,毕竟是自己主张要重新开发的啊(其实不重新开发也没办法了),
要边学习边工作,还要负责招聘。因为我也是刚接触B/S的,所以最开始的时候感觉比被面试的人还要紧张。

Struts相比Spring简单太多了(现在的感受),不过我真正掌握(会合理的使用)也花了三个月的时间,
一开始我看书,我承认我对中文图书有一种成见,因此没看出个所以然(只是会用了而已),
就拿这本书来说:精通 Struts:基于 MVC 的 JavaWeb 设计与开发,
应该是很经典的,可是如果顺序看这本书,2、3、4章让我十分恼火。
第二章是一个例子,我什么都还不懂,就让我按部就班做一件事儿,我个人觉得没有任何价值,
第三章与Struts基本不搭界,我感觉去掉这一章都没有任何感觉,
第四章就开始详细介绍Struts的配置文件,让我彻底迷失了方向。
老实说,这本书作为“参考”书是可以的,但我觉得并不适合作为入门的学习书,除非你准备往复看几遍来融汇贯通。

真正让我心里有底的,还是在看了官方文档之后:http://struts.apache.org/1.3.10/userGuide/index.html
我觉得通过这个文档,我很快就明白了FORM是如何被填充的,Action是如何跳转的,从页面提交、到后台方法执行、再到返回新页面,
这个过程在脑海里很清晰,这样自然就很容易理解各项配置的作用,也很容易处理出现的问题。

在以后的日子里,我又接触了一些开源项目的官方文档,比如JBPM,Ant等,我发现官方文档真的是了解一个系统的最佳资料,
一般好一点的项目都会提供Tutorial或者 User Guide或者Reference,这基本上是必看的。

就这样,在产品改版中,告别04年,进入05年,也是我在北京最郁闷的一年。

---

现在很多人都是从SSH开始接触JAVA,J2SE的东西只是浅尝辄止,了解而已,
我碰到不止一个同学,会做B/S应用,但不会用程序操作文件(当然,经过提示很快就会了)。
我从C/S入手JAVA,至少有一点好,就是打下了比较扎实的基础,

那么关于JAVA的学习路径问题,虽然现在是WEB为王,但不应该放松J2SE的学习,即便要用SSH,也要从基础开始:
1、Thinking In Java,打下良好的J2SE基础
2、sun官方的Java EE Tutorial,第15章之前重点看,15章之后有选择的看
3、如果学Struts,就看Struts User Guide ,
4、如果学Spring,就学Spring Reference Manual ,兼看Martin的经典文章:http://www.martinfowler.com/articles/injection.html
5、要学hibernate,最好先看看O/R Mapping方面的知识,还有DAO设计模式,然后是Hiberante Reference Documentation。

千万不要觉得英语无所谓,也不要因为怵头而回避英语,早一天克服困难,早一天受益。

最近较忙,先写这么多了。

------解决方案--------------------
LZ的出分有意思88分,基础很重要,英语也很重要。。。不过俺的英语有点烂。。。。
------解决方案--------------------
传统的CS架构用到的JAVA基础知识还是蛮多,谢谢楼主分享!
------解决方案--------------------
虽然不做java相关的开发,但看看楼主的经验和选择过程还是很有好处的。
继续支持。
------解决方案--------------------
奇怪 这次咋发技术区来拉?。。。昨天去面试 说是J2EE 结果要求会JSF、EXTJS、XHTML。。
------解决方案--------------------
顶了,偶也是直接SSH到java 基础还不够结实啊!!
学习...
------解决方案--------------------
探讨
奇怪 这次咋发技术区来拉?。。。昨天去面试 说是J2EE 结果要求会JSF、EXTJS、XHTML。。

------解决方案--------------------
受教了,楼主,英语很重要,但是俺也是硬着头皮看
------解决方案--------------------
... JSF、EXTJS、XHTML。。

公司要用到的话,应该是要会的, 如果不用到的话,很快就忘了
------解决方案--------------------