跳至主要内容

变化的尺度之程序设计

曾经"世界上唯一不变的东西就是变化"是我的至理名言。它也给了我一个生活的哲理,要随时接受变化,随时准备变化。如今,变化成了我最头痛的事情。主要原因就是,随着年龄的增长,感知周围环境变化的能力下降,自身的应变能力也跟着变弱。于是,今天就对这句话进行了重新解读。
变化本身是有尺度之分的。如果将之展现到直角坐标系之中,那么横轴就是这件事物的影响范围,纵轴就是这件事物的变化尺度。最终它展现的犹如一条逐渐增长的幂指数曲线,有时也似一半的抛物线,当然也可以是一条简单的递增直线。每件事物都有自身的变化趋势,甚至事物的每个组成部分亦然。而感知这些变化的则是我们身体的各个器官。并且每个器官感知变化的维度及范围都有限。也就是说,尺度就是变化的维度及范围标定。而尺度的意义就是为了被外界感知。太阳的东升西落对于人类来说是很重要的生存条件,因此,人类自身器官对于太阳变化的感知尺度就是位置及热度的尺度。而太阳对于地球来说是维持自身位置及运行规律的条件,则地球本身对于太阳的感知尺度则不仅是位置及尺度,还包括太阳风,太阳辐射的强度等等。

程序设计模式就是对于程序中变化尺度的一种划分手段。无论是23种设计模式还是OOP的设计思想无一不是在想办法用程序来处理业务逻辑中的变化尺度。比如,有两个模块相对不容易变化,但是两个模块间的组合方法却经常变化,则需要用适配器设计模式来解除两个模块间的耦合。此时,两个模块之间互相感知对方变化的尺度,通过适配器进行了很好的控制。再比如,命令设计模式中,命令的执行模块一旦建立则不容易改变,但是具体执行什么命令却需要变化。而命令设计模式则将命令的执行及构建解耦合,使得命令的构建与执行分离,使得命令的执行模块对命令的变化尺度的感知控制在一定范围,比如命令的类型变化。因此,解耦合出现的原因是一个模块中出现了一部分变化尺度大与变化的感知部分不匹配。解耦合本质上就是模块的分化。因此,耦合过松则沟通效率下降,程序执行效率必定受影响。耦合过紧则需求变化时修改成本升高,程序的设计效率必定受影响。

从变化尺度的角度来理解设计模式就不会陷入到死读书的泥潭。而用好设计模式仍然严重依赖于程序员本身对业务中变化尺度的观察及理解。不过这里可以通过变化尺度来获得几条很方便的技巧。比如,一个功能的正常运行所依赖的东西越少越好;把功能所依赖的外部条件写成定义为接口;观察功能的依赖条件及所依赖的变化尺度是否匹配等等。设计模式原则上要看得出来就用,看不出来就不用。

评论

此博客中的热门博文

用Google Calendar写日记

Google的产品一直都是非常强大的。说它强大并不是因为Google公司有多么牛逼,而是它的产品如果你用心用的话总是会用处许多花样。与之前 强大的Gmail做成完全可以替代Google Reader的RSS阅读器 一样,Google calendar一样是个功能强大的产品。它除了大家常用的日历、任务表功能以外,还有一项并没多少人知道的记日记的功能。今天我就详细介绍一下怎样用Google Calendar记日记。 一、日记 日记想必许多人都曾经写过,以前自己买个本子,晚上没人的时候偷偷写,写完之后藏起来。每个人都有点小秘密,不过如果大家回头看一下自己的日记,一定会发现自己原来真的好傻。其实有这个想法,日记就没有白写。日记本来就是记录自己成长的log而已。既然是log,那么流水记事是一定的,时间准确,天气环境什么的都要计入。这样才能以最快的速度还原当天的情景。这其实就是日记的功能。 此外还有童鞋在日记本里记下自己的小梦想,比如买部好手机,到泰山旅游,或者追小丽什么的。这些如果记入日记本里,你会督促自己努力实现自己的目标。 总之,写日记是个很美妙的事情。如何让这件事情延续下去?就请出今天的主角Google Calendar先生。用它来记日记有以下几大优点: 1、日记的数据很安全,保存在Google机房,并且随时可以导出备份。 2、支持的平台很多,网页端,手机网页端,Android客户端,iOS客户端,让你随时都可以记日记。 3、速度很快,Google Calendar一直没有被GFW认证过。另外google的速度,你懂的。 4、仍然是安全,密码只有你自己知道,别人不可能破解。 5、在日历里以日程的方式添加记事,想写多少都可以。事情精确到时分。 6、可计入的内容很多,日期,地点,人物,时间,天气、照片,视频,文档等等。 7、可以提醒写日记。 8、强大的全文搜索 9、日历的查看方式,让你对日记更一目了然 10、可创建多个日记本,让你对自己的日记分类更明确 11、对每一种事件都可以添加不同的颜色,让你对自己一天忙的事情一目了然。 12、界面简洁,可以自定义背景 13、可以针对某一篇日记,某一个事件通过邮件的方式与人分享 缺点: 这种写日记的方式是对传统写日记的习惯的一种挑战,需要你逐渐的适应这种写日记的方式

自己打造Gmail RSS阅读器完美替代Google Reader(Gmail与ifttt的完美结晶)

Gmail RSS阅读器已经升级到2.0 GR挂掉的日期临近, Feedly 跟着不断的抽风,其他RSS阅读器残疾的功能让我们又一次怀念GR的日子,最近突发奇想,Gmail这么强大,可不可以变成RSS阅读器呢?答案当然是能的,并且与GR相媲美。 于是自己在G+的基友们帮助下打造了一个利用ifttt与Gmail配合的RSS阅读器,相当强大,优点多多,请各位达人指教: 1、收取速度国内延时20分钟之内,无漏收(国外源在五分钟之内) 2、只要Gmail不关,ifttt不关,那么你就可以一直使用下去 3、 内容不过滤,安全 4、翻墙订阅没问题,图片照常显示 5、用Gmail的标签以及关键词过滤管理订阅源,与gr的边栏一样的效果 6、 可以加星标,另加标签来保存重要的文章 7、Gmail的访问速度 8、 Gmail的各种访问平台,跨平台使用。Android,web,桌面,windows,mac,iPhone,iPad,Linux等等,只要能用Gmail就可以用Gmail RSS 阅读器。 9、Gmail的IMAP设置可以在移动端有选择性的收取某个标签的订阅源。 10、 以往的订阅条目全部保存 11、订阅更新可以通过邮箱提醒 12、 全文搜索 13、对收取过程的全程监控 14、可以邮件编辑后转发以此来共享,目前evernote,Blogger,QQ空间支持邮件发布 15、 支持快捷键并且与GR的差不多 16、利用Gmail实验室里的预览窗格可以增加一种阅读方式 17、可以标为已读 18、可以自动翻到下一条目 19、可以删除无聊的条目,比如博主的测试条目 20、客户端有没有都可以用 还有更多的功能供大家来发现 当然也有缺点: 1、添加订阅比较麻烦:需要在ifttt添加触发,在Gmail里面添加过滤,标签 2、邮箱界面的阅读有些童鞋不喜欢,不过Gmail可以换背景的说 打造教程: 一、总体思路 这个Gmail阅读器主要原理是利用ifttt的Feed 应用抓取订阅源的文章更新,然后利用设定好的触发器,通过Gmail应用将这个更新作为一封Html邮

Gmail RSS阅读器2.0升级版

用Gmail+ifttt的完美搭配做成了完全可以替换Google Reader的Gmail RSS阅读器1.0,教程在此: http://james-sun.blogspot.com/2013/05/google-readergmail-rssgmailifttt.html 但是经过一个星期网友们的建议之后,发现了许多不够完美的地方,博主总结了各个建议打造出来了Gmail RSS阅读器2.0. 这次的升级log有以下几点: 1、更加精准方便的收件人地址过滤,解决关键词过滤的各种缺点 2、增加Feedburner的功能,解决依靠ifttt的局面 3、颜色标签,更加方便的管理Feed更新 4、增加回复、转发等共享及保存的功能 5、增加稍后阅读及笔记等标签,让Gmail不仅可以做RSS阅读器,也可以做笔记软件。 6、原来的20大功能一个不少 本篇文章是基于你已经用过 Gmail RSS阅读器1.0 或者明白它的工作原理,因此如果你不是,那么先点链接温习一下吧! 一、精准方便的收件人地址过滤 如果你拥有一个Gmail邮箱,那么你就拥有了无限个邮箱地址。假如你的邮箱是 google@gmail.com , 那么 google+yueguang@gmail.com ; google+QQ@gmail.com ;google+com+cn等等这样格式的邮箱地址都是你的,并且凡是发送到这些邮箱的邮件通通进入你的 google@gmail.com 这个邮箱。 Gmail的过滤器有个通过收件人过滤的规则,在这个规则里填写这个收件人( google+qq@gmail.com )的地址,那么凡是发送到这个地址的邮件将服从过滤器的命令,对其加标签,跳过收件箱。 此外, g.oo.g.le@gmail.com 这种格式的邮箱地址也是属于你的。 g.oo.gle+qq@gmail.com 这类格式也是你的。然而,每个不同的邮箱地址在过滤器面前却都是不同的。就是这么神奇。 多个收件地址过滤的方法: 如果你需要将许多个feed更新归类到一个标签,那么在使用收件人过滤方法的时候,邮箱地址的填写格式一定要这样填:( google+aa@gmail.com )|( google+bb@gmail