当前位置: 首页 > news >正文

组件化思考

今天翻看OpenNETCFBlogOpenNETCF年末总会评选出一年中最好的文章,尽管“The Best of 2005”有所减少。但是OpenNETCF.Rss占据了很重要的位置,谁叫Blog今年这么火呢。

因为这两天也在琢磨着类似的题目,所以留心看了看,看完OpenNETCF.RSS的类图还是吃了一惊,从异步到同步,不同网络协议的支持,不同RSS协议都得到很好的支持。尽管作者参考了其他人的设计,但是如此考虑完善的类库,让我觉得“人比人也得扔”。

紧接着,看同一位作者(Alex Yakhnin)写的RSS阅读器,一句话让我很有感触:“The best way to test functionality and usability of a library is to use it for development for some real project.

于是,我一下子明白了大家的差距为什么这么大。写软件如同盖房子,这是个不新鲜的比喻了。除了设计图纸、土木工作外,建材也很重要。中国农民盖房子,会买砖、瓦、木头,这些基本的材料,然后木工、瓦工一起上,把木头变成门窗、房梁,再用砖瓦盖起房子来。祖祖辈辈都是这么过的。可是我们盖不出世贸中心来(当然也引不来拉登……),美国在上世纪大批量建筑那些摩天大楼时,用的都是钢结构,所有的结构都是按标准生产的,施工的工程其实就是组装。

套用到软件工程上来,中国的程序员大部分还着眼于可以交付给客户的软件,这个软件中体现更多的是用户的思想以及他们的行业特点,而程序员的工作大部分还集中在把数据库的信息显示到客户可以看懂的界面上。简单,直接,如同黄土地上三间亮堂堂的大瓦房。

当然,在这些木匠瓦匠中,也有不安分的人,总是想着能够更省力。所以他们也创造了一些标准,一些可以直接拿来用的组件,比如门窗。可是当他们想统一大梁的标准时,用户不干了,我家的房子怎么能跟牛二家的房子一样?于是,木匠们用去继续寻找符合主人要求的木头去了。

中国的程序员也知道设计类库会为以后的工作节省大量的精力,可是项目的压力很重,老板总要求随时看到可以演示的东西,大部分老板是不会帮你Review代码的。于是,即使有程序员写了一个类库,也只是实现了当前项目需要的功能,没有测试、没有文档,使用范围也只是身边的伙伴。当下一次再碰到类似问题时,翻出原来的代码,发现老类库没办法适应新要求了,没有文档,连程序员自己也弄不清代码究竟是什么意思了。于是,索性再按新项目的要求写一段新的代码,这次连类库都省了,反正以后也用不到。

久而久之,程序员思维的中心便是用户界面,再也不会去想费时费力却得不到老板认可的类库了。所以,中国没有WTL、没有OpenNETCF

其实所有程序员心里最先想到的是组件,用一个组件去实现某个功能,将所有的错误处理、边界控制,全都放在这里组件里,而不是交给用户界面去做。我们要对组件进行单元测试,而不应该把测试交给界面测试人员,界面测试人员应该更关注人机交互性能,而不应该在逻辑迷宫里转悠。

程序员看似无用的忙忙碌碌,也许会创造一个新的世界。学会组件化思考,我们以后写得不应该是应用程序,而应该是组件。新的一年快到来了,希望程序员们明年有个好心情,也希望更多的老板们可以像 Google 那样,多给程序员一点思考的空间,也许他们创造出来的就是下一个 WTL

相关文章:

  • react的替代者Inferno 和preact
  • 一同事奉敬拜主
  • rollup 和 webpack 2 都要用 ES6 module syntax 才能 tree-shaking cc 指的是closure compiler
  • 相对比较 includes == 对比
  • 修复安装UltraEdit后,Internet Explorer (IE)的源代码查看器不再是Notepad的问题!...
  • git 文件修改不区分大小写 设置git的敏感
  • 亏欠你真多 [光碟]
  • 正则test的巨坑 在循环的时候去掉g就行了
  • 今天看了《变形金刚.剧场版》,突来灵感PS了一下柯博文,但愿不要被博派看见了!...
  • ES6修饰器
  • awstats简易安装文档
  • vue中data 需要return返回
  • 小程序转base64
  • wikipedia简易安装
  • immutable的api使用
  • 自己简单写的 事件订阅机制
  • android 一些 utils
  • Angular Elements 及其运作原理
  • bearychat的java client
  • git 常用命令
  • learning koa2.x
  • select2 取值 遍历 设置默认值
  • vue 个人积累(使用工具,组件)
  • 程序员最讨厌的9句话,你可有补充?
  • 设计模式(12)迭代器模式(讲解+应用)
  • 王永庆:技术创新改变教育未来
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​香农与信息论三大定律
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (javascript)再说document.body.scrollTop的使用问题
  • (过滤器)Filter和(监听器)listener
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (利用IDEA+Maven)定制属于自己的jar包
  • (一)为什么要选择C++
  • .Net Remoting常用部署结构
  • .net wcf memory gates checking failed
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • :中兴通讯为何成功
  • @ModelAttribute 注解
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [100天算法】-目标和(day 79)
  • [20161214]如何确定dbid.txt
  • [20171106]配置客户端连接注意.txt
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Android]How to use FFmpeg to decode Android f...
  • [BT]BUUCTF刷题第8天(3.26)
  • [BT]BUUCTF刷题第9天(3.27)
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [c++] C++多态(虚函数和虚继承)
  • [Deep Learning] 神经网络基础
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽