近期被外派帮助国内某公司做政府某部门OA系统。听说他们那有个成熟的java框架,使用了非常长时间,抱着学习的态度,我进入这个公司。当我熟悉了一周后,留下了非常多疑问,而这些疑问,也诱发了这次关于“抽象”这个问题的思考。大家和我一起来研究研究这些疑问。

1,概览:

初步接触这个系统。公司的技术总监,就和我们交流了这个框架,依照总监的话就是“这个就是个简单的ssh框架,没什么!”,事实证明。尽管看似简单,可是还是有不少的点能够研究的!

疑问:

随着对框架的深入。我们产生了几个疑问。踢给了总监:

(1)既然用了hibernate。为什么还大量使用了原生sql?

(2)对基础操作的封装为什么大量使用了聚合,继承基本没实用?

(3)前台为什么没用框架。而是一些技术的组合?

很感谢我们的总监,无私的回答了这些问题:

总监答案:

(1)关于sql与hql的选择,当初他们做了不同的尝试,发现:hql尽管封装的好。可是有几个缺点:速度慢,效率低,难处理复杂表。

基于这些,他们选择了部分hql部分sql,对于这些。我们对于单表且简单的操作用hql,对于单表复杂或者多表的操作使用原生的sql,通过这样平衡面向对象和效率之间的问题!

(2)关于继承,他们也考虑过,可是继承实现的关系太强,假设过多的使用继承就会造成类的功能过于多,而聚合是个不错的解决方式。这样再扩充或者改变的时候。就会方便一些!

(3)前台框架他们也实用过一些,可是他们认为自己写,更有兼容性。用主要的html搭建的页面兼容性更好,而在一些诶须要特殊效果的地方。则使用一些ext的控件。这样也是个非常好的选择!

2。深入:


随着我写了一些代码,我发现总监的想法非常丰满。可是显示非常骨感!对于我的第一个疑问,我是比較允许总监的意见的,在一些特殊须要的场合,做特殊的处理,这是种非常好的平衡。我们设计一个框架的时候。这样的平衡也是要考虑的,我们的封装绝不是隔绝最基础的实现,而是在基础的实现上。做了封装,对我们常规的操作有一个系统的抽象和封装!

可是第二个问题,我是持久自己的一些看法的。对于继承的强关系,这的确是个问题,可是这不是阻碍我们使用的问题,在抽象这个层面,继承其技术基础一直为我们提供最优质的服务,我们回想以下向对象的三个特征:封装,继承,多态。

这三者相互作用相互碰撞才有了我们的面向对象的思维!

我们再看看这种设计经验:多组合,少继承,低耦合。高内聚。这里我们要澄清,少继承是在一定的范围内说的。在保证内聚性方面。继承是个比較好的选择,我们看看我们的java类哪个不是继承了object这个类,这也间接的说明了问题!并且在编码中。我发现,不用继承,我会写非常多反复的代码。我就不如针对同的业务抽象不同的父类,这样,降低了至少70%的工作!

对于第三点,我想说。前台的框架的选择是个头疼的故事,可是还是有非常多经典的额框架是我们一直用的,起码我们不就一直在用jquery吗?而今的框架已经越来越简单且强大了一味的闭门造车,我想,这个时代,已经不是那个时代了!

顺便吐槽一下,公司没有网啊,整个楼层仅仅有三台公用电脑能够上网,每天还限制为2g流量,亲,这是21世纪吗?我是不是穿越了!

3,改造:

吐槽了这么多,事实上。我还是对这个框架比較惬意的,尽管这样和那样的问题依旧不少,可是我发现这些都不影响他的适用性,在经过我给它动了个小手术后,他的代码量已经大幅下降了,适当的使用继承这个利器,我们就是在为自己创造时间。

总结:

观察身边的程序员们,我们是不是常常这么做,从别人那copy下他的代码。然后改几个属性,功能就万事大吉了。假设有了新任务,按我们要凭借这自己超强的记忆力,修改我们全部copy的代码。然后在从新做一边单元測试!

我们提出一个观点:一个框架搭建好之后,不论什么地方的封装,都是一个高智慧含量的复制!



        这就又牵扯一个话题了。究竟什么是复制?人copy和维护代码是一种极其昂贵的成本。而让机器自己copy维护代码是节省了千万倍成本的复制!人的作用如今来看,就在于抽象和总结了,底下的。简单的复制性活动交给机器,就像如今的3d打印一样,这是个革命,已经不是技术的革命了,而是思想的革命。智慧生物要发挥它应有的作用。copy是不须要智慧的,就交给机器吧!

这是我们这个时代的潮流。

谈抽象1——无脑copy等于自杀的更多相关文章

  1. CodeForces 909E Coprocessor(无脑拓扑排序)

    You are given a program you want to execute as a set of tasks organized in a dependency graph. The d ...

  2. 【原】无脑操作:express + MySQL 实现CRUD

    基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...

  3. Go语言及Web框架Beego环境无脑搭建

    [原]Go语言及Web框架Beego环境无脑搭建 本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1.windows-386.msi,对应32位w ...

  4. 【原】无脑操作:eclipse + maven搭建SSM框架

    网上看到一些Spring + Spring MVC + MyBatis框架的搭建教程,不是很详细或是时间久远了,自己动手整一个简单无脑的! 0.系统环境 1)Windows 10 企业版 2)JDK ...

  5. 计蒜客 无脑博士 bfs

    题目链接无脑博士的试管们 思路:直接模拟倒水过程即可,但是需要记忆判断当前的情况是否已经处理过.dfs和bfs都ok AC代码 #include <cstdio> #include < ...

  6. 【原】无脑操作:ElasticSearch学习笔记(01)

    开篇来自于经典的“保安的哲学三问”(你是谁,在哪儿,要干嘛) 问题一.ElasticSearch是什么?有什么用处? 答:截至2018年12月28日,从ElasticSearch官网(https:// ...

  7. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  8. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

    开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...

  9. 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改

    Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...

随机推荐

  1. 淘宝JAVA中间件Diamond详解(二)---原理介绍

    转:http://blog.csdn.net/anhuidelinger/article/details/70314744 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本 ...

  2. 文档对象模型-DOM(一)

    首先看一下DOM树结构: 每个节点都是一个对象,拥有方法和属性. 脚本可以访问以及更新DOM树(不是源代码). 针对DOM树的修改都会反映到浏览器. 访问并更新DOM树需要两个步骤:   一.定位到与 ...

  3. Unity网游开发生存指南—蒸汽之城

    Posted by amy on 2013.03.07 文 / 王楠(梦加网络 游戏制作人) 前段时间关于Unity是否适合国内手游/网游创业团队的讨论非常火爆,本文从<蒸汽之城>的开发历 ...

  4. C++常考面试题汇总(持续更新中)

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  5. Android or java https ssl exception

    1.http://www.trinea.cn/android/android-java-https-ssl-exception-2/ 2.http://www.eoeandroid.com/threa ...

  6. mysql 5.6的安装

    MySQL安装   yum install -y perl-Module-Install.noarch cd /usr/local/src wget http://mirrors.sohu.com/m ...

  7. iOS开发-在Swift里使用AFNetworking方法

    在OC里使用惯了AFNetworking,比较喜欢这一个第三方库,在别的途径里得知可以在Swift里使用AFNetworking.但是那个时候我不知道具体的操作是怎样的,于是我只能去百度.GOOGLE ...

  8. SVN环境搭建(1)

    原文地址:http://www.penglig.com/post-72.html Subversion 是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建 SVN 服务 ...

  9. 为什么选择Python

    经常会有同学问我为什么选择Python.我很喜欢这门语言,因为它的简洁灵活,易学,易读,可移植并且功能强大. 高级 可以说,每一代编程语言的产生,我们都会达到一个新的高度.从汇编语言,到C Pasca ...

  10. 通过 P3P规范让IE跨域接受第三方cookie session

    所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令.这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp. 我查到了 ...