随笔分类 -  软件设计

摘要:谈谈UI架构设计的演化经典MVC在1979年,经典MVC模式被提出。在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Reenskaug在跟一些人的讨论中,逐渐剥离出一系列的概念,最初是Thing、Model、View、Editor。后来经过讨论定为Mod... 阅读全文
posted @ 2015-02-11 00:19 winter-cn 阅读(20436) 评论(14) 推荐(25) 编辑
摘要:jQuery是业内知名的javascript框架,它的实现和设计可以说代表了javascript界最高的水平,本文试从四个方面来以jQuery为例总结库与框架设计的原则和优劣判断。解决问题首先请看一个我实现的框架,我把这个库称为四则运算。function add(a,b) { return a+b;}function mul(a,b) { return a*b;}function minus(a,b) { return a-b;}function div(a,b) { return a/b;}这个库的API简洁优美,实现的更是优雅无比,它把四则运算统一成了函数形式,使得... 阅读全文
posted @ 2013-02-20 23:49 winter-cn 阅读(24483) 评论(34) 推荐(20) 编辑
摘要:在Web中充斥着所谓的MVC框架,而在我看来,因为一些关键性的技术原因,MVC在Web前端开发中根本无法使用(对的,是无法,而不是不该)。 在MVC原始报告中指出: view永远不会知道用户输入,比如鼠标操作和按键。 很显然,在Web前端,你无法做到这一点,因为Web的程序中,用户的输入必须通过监听窗口、文档和元素上的事件来获得。——而这些东西常常被认为是View。 于是一些奇怪的认识诞生了,比如认为Controller应该是View操作Model的中介。 我曾经尝试设计一个编程模型让所有的事件流经Controller,但是事实上我发现这样的做法非常糟糕。——这个尝试让我从M... 阅读全文
posted @ 2012-09-16 02:53 winter-cn 阅读(23443) 评论(26) 推荐(14) 编辑
摘要:MVC原本的设计针对的是SmallTalk这样的整个程序用同一种环境和语言构建的系统,Model/View/ViewModel是一个对MVC的改进,用以适应众所周知的Web环境以及现在的Avalon开发。 阅读全文
posted @ 2012-08-08 14:22 winter-cn 阅读(5303) 评论(5) 推荐(2) 编辑
摘要:本文是MVC最初提出并确定概念名称的论文。 阅读全文
posted @ 2012-06-13 19:37 winter-cn 阅读(4915) 评论(0) 推荐(0) 编辑
摘要:惭愧,一个系列第二篇能跟第一篇隔两年之久,我还真是…… 对象与类 上篇文章谈到了"什么是对象"问题。而事实上,我们所见过和学习的大多数面向对象语言,迎面而来的一个概念是:类。 遗憾的是,大部分程序语言的书籍,都是直接开始讲解类的概念,并没有着重强调类和对象的关系。所以,面向"对象"的语言,为何引入了这样一个"类"的概念呢?最简单的回答是,你不能够一个一个地去描述对象,那样太愚蠢了。 类对于一般的人类而言,同样是一个朴素的概念,在比对象认知稍晚些时候,人类开始具有抽象能力:小孩子不再说“我要那个”,而是开始表达“我要苹果”。 再更大一些 阅读全文
posted @ 2012-04-02 14:24 winter-cn 阅读(3941) 评论(5) 推荐(5) 编辑
摘要:主要是现在这设计模式的文章太多,而且各种烂各种曲解,看的人心烦,烦到忍不住想自己写一个系列把它们说清楚——但是呢,转念一想,我写的再怎么清楚能有GoF清楚呢,怎么能有GoF的影响力大呢,GoF明明白白地摆着,还有这么多人乱搞,我又能做什么呢?所以想了半天,我觉得就写一篇文章来吐槽好了。 - -! 阅读全文
posted @ 2012-03-10 22:15 winter-cn 阅读(23761) 评论(151) 推荐(38) 编辑
摘要:写这个文章,主要是因为网上对C#字符串和享元模式的误解比较多。 Flyweight模式 先说这名字,fly呢,就是苍蝇,没错这里面不是飞的意思,是苍蝇的意思,weight大家都知道,就是重量,苍蝇的重量,就是非常非常轻的意思。所以Flyweight模式就是处理非常非常轻量级对象的一个东西。 Flyweight的目标是解决大量细粒度对象的内存消耗问题,当然,巧妇难为无米之炊,任何模式和手法都不能凭空造出内存来,所以享元模式针对的情况是这些细粒度对象的中数据有重复的情况。 Flyweight的做法是,把对象的状态(通常用属性表示),分成两个部分,一部分是内部状态,另一部分是外部状态。内部状... 阅读全文
posted @ 2012-01-21 02:09 winter-cn 阅读(8174) 评论(20) 推荐(4) 编辑
摘要:在网上常常能看到文章讲面向对象的三大基本特征"继承"、"封装"、"多态",我以为这是坊间流传的最不靠谱的一个说法。本文先谈谈其中讲到的一个特性:多态。多态是一个跟面向对象完全正交的概念,两者之间可以说没有任何必然联系。 阅读全文
posted @ 2011-05-03 21:57 winter-cn 阅读(5341) 评论(61) 推荐(3) 编辑
摘要:1.把大象关进冰箱里问题面向过程:把大象关进冰箱里: 把冰箱门打开=> 大象放冰箱里=> 冰箱门关上面向对象:冰箱.开门()冰箱.放入(大象)冰箱.关门()函数式:关进(冰箱,大象): 关门(放入(开门(冰箱),大象))————————————... 阅读全文
posted @ 2010-07-02 19:55 winter-cn 阅读(3753) 评论(34) 推荐(7) 编辑
摘要:"客户说是这样的!","客户根本没这个需求!"需求对程序员而言,往往犹如圣经,客户说了,我们就要这样做。但是,往往客户明天就变了一幅嘴脸,原本明明说好按钮在下面的,结果现在一定要挪到上面去,明明不需要保存颜色的,结果现在一定要把颜色也加上。于是我们从头改到尾,从下改到上,好不容易改完,好了,客户明天想法又变了!怎么办?继续改!好吧,厌倦了这种可怕的生活了吧,于是我们希望应对这种问题,于是我们决定,... 阅读全文
posted @ 2010-05-09 01:40 winter-cn 阅读(2099) 评论(38) 推荐(2) 编辑
摘要:原型模式的意图经常被误解为复制对象,本来我觉得设计模式完全无必要(也不太敢)写任何文章,GoF书里写的清晰准确,还有无数例子,但我看到过无数文章把原型模式彻彻底底地变成了从已有对象方便地复制一个新对象,所以决定趟趟浑水也来白话一篇,说的不对的地方欢迎大家拍砖,猛拍,狂拍,往死里拍…… 阅读全文
posted @ 2009-12-02 02:32 winter-cn 阅读(8980) 评论(71) 推荐(4) 编辑
摘要:先来看一个例子:[代码]Fibnacci数列,相信是个程序员都能写出来,重点是,这个Fibnacci数列的计算完全是在编译时完成!后面的print也是如此,当你把参数调得很大时,运行时间不会有任何改变,但是你会花费长时间在编译阶段。如果你听说过一些模板元编程,你一定会知道"C++模板是图灵完备的"这个说法。模板元是如何图灵完备的?答案是,模板元跟Functional原理是一样的。模板的本质是定义与... 阅读全文
posted @ 2009-09-05 23:00 winter-cn 阅读(3004) 评论(12) 推荐(1) 编辑
摘要:最近跟一些朋友讨论关于工厂模式的一些东西,觉得很有必要写篇东西把抽象工厂的应用方法写清楚。GoF在抽象工厂一章中没有花很多篇幅在如何应用抽象工厂上,希望本文理解抽象工厂能起到一点作用,能让网络上少一些诸如"工厂用来重构switch的言论",若能对各位实际开发有点启发,则非常荣幸。 阅读全文
posted @ 2009-04-15 21:12 winter-cn 阅读(6642) 评论(44) 推荐(0) 编辑
摘要:如果你要把一只猫卖给一个计算机专家,千万不要说它有多聪明多可爱,而要说,这是一只面向对象的猫。这是程序员对程序员的揶揄。 面向对象渗透到软件的各个领域,既然找不到银弹,这颗铜子弹成了我们对抗人狼的最佳武器。 在这样的世界里,你有没有想过,什么是面向对象呢? 如果你习惯性地说:继承、封装和多态,那么请你继续读完这篇随笔吧,它会带你认识一个真实的OO 阅读全文
posted @ 2008-11-18 00:31 winter-cn 阅读(1691) 评论(8) 推荐(2) 编辑
摘要: 软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。   下面是Garlan和Shaw对通用体系结构风格的分类:   (1)数据流风格:批处理序列;管道/过滤器   (2)调用/返回风格:主程序/子程序;面向对象风格;层次结构   (3)独立构件风格:进程通讯;事件系统   (4)虚拟机风格:解释器;基于规则的系统   (5)仓库风格:数据库系统;超文本系统;黑板系统 阅读全文
posted @ 2008-06-01 22:27 winter-cn 阅读(1228) 评论(0) 推荐(0) 编辑
摘要:在这个js框架随处乱跑的时代,你是否考虑过写一个自己的框架?下面的内容也许会有点帮助。 PrototypeJS JQuery YUI Mootools DWR DOJO Ext 这些框架并非遥不可及也不是完美无瑕。 阅读全文
posted @ 2008-05-22 14:21 winter-cn 阅读(10302) 评论(5) 推荐(4) 编辑