转自:码农翻身(微信号:coderising)
张大胖立志走上 Java 之路,听了大神 Bill 的指点,先学了 Java SE, 把集合、线程、反射、IO、泛型、注解之类的基础知识学了一遍,在 Bill 的严厉督促下,写了大量的代码。
然后开始学 Web 基础,什么 Http, html, javascript , css , servlet, jsp , tomcat … 又是一大堆知识点。他在网上找了一个小网站,自己模拟着做了一下,虽然不是专业美工,界面惨不忍睹,但总算是把功能模仿了七七八八,很有成就感。
大胖拿去给 Bill 看了,Bill 夸奖道:“嗯,功能实现的还可以,没有用任何框架能做成这样子,很不错。”
大胖说:“框架?什么是框架?”
Bill 愣了一下:“你还突然把我给问住了,我们整天开口框架,闭口框架,现在让我给框架下个定义,我还真说不出来,让我想想。”
Bill 闭目养神,大胖虔诚等待。
不到一炷香功夫,Bill 睁开眼睛:“我来给你举个例子,你不是刚刚用 servlet 和 jsp 做了小的 Web 项目吗,假设有人出钱让你再做一个类似的系统,你会怎么办?”
“那我就把现在的代码复制一下,在上面改改,不就得了?”
“如果有十个八个类似这样的项目呢,难道你都通过复制粘贴来做吗?”Bill 问
“十个八个?我还是跳楼去吧。”
“那你没有想想把其中重复的一些东西抽取出来,形成可以复用的东西?”
张大胖说:“听你这么说,还真的有一点可以复用的东西,比方说 URL 和业务代码的映射,我经常会遇到类似这样的 url:www.xxx.com?action=login,在后台的 servlet 中我就判断,如果 action 的名称是 login , 我就把 userName, password 这样的参数从表单中提取出来,执行登录的代码。我得写很多的 if else 才能支持不同的业务逻辑,很折磨人。有时候我就想,要是有一种方法,能够直接把 URL 和 Java 类直接映射起来就好了,这样就轻松多了!”
“没错,这是一个很好的想法,还有吗?”Bill 笑着问。
“嗯。。。再比如数据验证啊,比如登录时用户名或者密码出错,我要在浏览器端显示错误提示信息,这个也很难搞啊,错误提示的字体、颜色、图标、位置太烦人了。”
“还有吗?”
“对了,访问数据库也是个大问题,我写了很多的 SQL, 很多的 JDBC 代码, 仅仅是为了把数据从数据库取出来,放到 Java 对象中去。你肯定知道,直接用 JDBC 编程得处理很多细节问题:一定要记住关闭连接了,处理异常了。。。等等,不瞒你说,很多代码都是我复制粘贴的。”
“难道你不能写一个通用的类,传入 SQL,返回结果集吗?”Bill 问道。
“那我肯定是写了,但是把结果集变成 Java 对象还有一段很长的路呢,没啥技术含量,纯粹体力活,怪不得人家叫我们码农!”大胖愤愤的说。
Bill 说:“我刚才翻了翻你的代码,我发现很多的地方都让人不爽啊,比如你几乎把所有的业务逻辑都写到 Servlet 当中去了,中间还掺杂者页面控制和跳转,这么乱七八糟像意大利面条一样的代码过了一个月估计你自己都看不明白了。”
大胖不好意思的笑了:“不用一个月,这刚过了一个星期我就犯晕了。”
“所以嘛,其实你这些问题我们的前辈早就遇到了,他们也苦苦探索,不断寻找好的实现方式,找到以后就把各种经验给固化下来,称为最佳实践。”
“最佳实践?能举个例子嘛!”
“比如在 Web 开发中就有一个很好的实践啊,叫做 MVC。就是针对你上面的业务逻辑和页面控制混在一起提出的解决办法。这个实践会强烈的建议你把数据模型、页面展示、页面跳转控制分开来写,防止搅成一团。”
Bill 意犹未尽,继续举例:“再比如你说的第一个问题,也早就有解决方案了,可以利用 XML 或者 Java 注解来描述 URL 和 Java 类之间的关系,你只需要声明一下,背后的操作,都交由框架去处理了。还有你的 Java 对象和数据库表的对应关系,也只需要声明一下,框架就可以帮你把数据取出来,填充到 Java 对象中去,这就极大的减轻了你的工作量。”
“Bill, 你又提到框架这个词了,可不可以这么说,框架就像一个模板,里边已经预置了一些公认的最佳实践,我要是想用的话,把我项目相关的东西填充进去就可以了,是不是这样?”
“可以这么理解,框架像个半成品,是无法独立运行的,必须由开发人员按照它定义的规则,把项目的代码放置到指定的地方,由框架整合起来,这才是一个完整的应用程序。”
一键生成基于 SSH 框架的功能代码
大胖挠着头说:“那框架其实也没什么啊,我只要理解了那些最佳实践,掌握了它的规则,可不就学会了吗?”
“没错,现在很多 Java Web 系统都是基于像 SpringMVC, Hibernate, MyBatis 这样的流行框架构造起来的,框架不得不学,但是如果只会使用框架,只会填充代码,那只是一个 HTML 填空人员。”
“那我学完了框架,可以用框架做项目了,接下来学什么?”大胖心里有点没底。
“你要是对 Java 后端编程感兴趣,还有很多东西啊,用框架实现了业务只是很小一块,还有系统架构设计,缓存、性能、高可用性、分布式、安全、备份等很多内容啊,你学的越多,就会发现无知的领域更多,所谓学无止境啊!”
张大胖目视远方,沉默了。。。。。