进公司之后,很快速的要接触好几个框架,struts,ibatis,freemarker,spring等等。恕我的无知,学生的理论派让我从来没有真正关心过如何使用框架,这些玩意对我而言都是“新鲜货”。因为年轻,所以以为不管用什么东西都是假把式,毕竟这都是人家制定的规则,人家让你怎么用你就得学着怎么用。所以叛逆地想去知道人家这个框架究竟是怎么做的,学会如何制定规则才是我所欲也。然后看到头大也看没看懂。
但是上班了老板不会给我这么多时间去浪费,不管你学的怎么样,能出活才是硬道理。那么就没有以前当学生那会的时间去了解这些个框架的底层实现细节,设计思路,赶紧TM给我用熟了才是真的。但是即使只是用用,也真的有了点感悟,那么就来谈谈感悟。
所谓框架,不管是用于哪方面,数据库也好,网络也好,代码管理也好,无非就是一个目的,简化程序员的工作,减少编程的难度。方式有很多,比如ibatis,它帮你省去了纯jdbc那一套的配置工作,你不用去手工建个connection,不用一条条sql的去拼,得到的结果还要自己再解封,这些事都帮你省了,你只要配个xml,写很多的sqlmap。比如freemarker,他帮你做的就是html的动态部分,我没学过html,但是大概知道这是个静态的文本语言,可以想象到根据不同情况而做出不同行为对这种语言来说是多么蛋疼,你要做的就是用freemarker的api在代码里写一套全局的配置,指定读哪些ftl,哪些ftl跟哪些数据model配对,然后写很多的ftl。比如maven,它帮你管理好要下什么包,你不用一个个地去down,你只需要去配个全局的setting,指定从些server去下,然后写很多的pom。
OK,从上文来看,我的排比句应该还算及格吧,相信大家已经很明白我想说的意思了。就编程而言,任何工作总可以分为变和不变的两部分,框架智能地帮我们完成了这两部分的工作,然后每个框架都会提供两个入口,一个入口代表不变----进入此入口我们需要知道如何写全局的配置(这是真正极大简化编程难度的地方,我觉得大赚);一个入口代表了变----进入此入口我们可以开心地去做我们真正想做的事情了(当然有前提,你得知道sqlmap、ftl、pom这些东西怎么写,很自然地你要去学框架提供给你的接口,学一个个标签代表啥)。那么学习框架就主要关注这两个点就OK啦。
其实文章到此就可以结束了。无奈人类的发散思维,你懂得。。框架如此,推远一点,工具是否也如此,语言是否也如此。哪个大牛曾说过软件就是程序加上数据,从用户来看,程序是死的也就是不变的,数据是活得也就是变的。我们院长唯一教过我们的一堂课只说了一句至理名言,软件就是抽象,深以为然。软件就是把不变的东西抽象出来,把变的东西提供接口给别人用(不止用户,可以是另一个模块,另一个socket,另一个数据库连接)。