设计理论
文章平均质量分 90
iteye_3445
这个作者很懒,什么都没留下…
展开
-
图形 vs. 文本
现在MDA建模的宣传多集中于可视化的表现形式, 鼓吹通过平面图标的摆放来传达信息.图形的方式是否一定比文本表现要优越呢? 图形的表现能力确实是要强于普通文本的.文本对于信息的组织方式基本上是一维的,而平面图形本质上是二维的(如果考虑颜色因素, 平面图形可以说是2.5维的). 人的视觉对于图形有着天然的并行处理能力,通过图形我们有可能更有效的获得信息. 但是程序中细节的关联可能是复杂...2005-12-13 23:32:00 · 127 阅读 · 0 评论 -
[导入]外在表现与本质
如果一个东西看起来象花生,闻起来象花生,吃起来也象花生,那它究竟是不是花生?如果两个事物在所有可观测行为上都表现一致,那两者的本质是否统一就成为了一个不可证伪的问题,从而处于科学范畴之外。而从人的机会主义倾向来看,我们理所当然的会认为这两者是同一概念。我们以观察来认识世界,当然也就是以行为来界定事物。问题在于,我们在理论上要以事物的所有行为来界定它,而我们目前观测到的又永远只是它的部分行...2006-01-23 23:16:00 · 85 阅读 · 0 评论 -
可退化的形式
今天adun给我讲了一个他所谓可退化的设计,在我看来问题还是多多。从直观的角度上说,在java中声明一个具有多个参数的函数,调用的时候对于不需要用到的参数都传入null, 这不是理想的可退化场景。所谓的退化不仅仅是概念层面的,不仅仅是关于语义的,很大程度上它也是形式上的,是关于语法结构的。 理想的退化场景是尽量维持形式/结构稳定性的情况下实现诠释范围的缩减,在任何层面上都不需要知道...2007-06-27 22:55:00 · 137 阅读 · 0 评论 -
关于REST
REST(Representational State Transfer) 是Roy Thoms Fielding在其博士论文中所提出的一种架构风格(Architectual Style)。http://roy.gbiv.com/pubs/dissertation/top.htm http://www.redsaga.com/opendoc/REST_cn.pdf 可以说它也体现了整个互联网...2007-07-08 21:58:06 · 99 阅读 · 0 评论 -
逆元:不存在的真实存在
负数没有直接的几何意义,因此它被认为是对应于不存在的事物。而按照古希腊的逻辑,不存在的事物是不可能存在的,因而也就是无法被理解的,更不可能参与到推理过程中,因此是无意义的,无法被定义的, 因此它是不存在的。中国人注重的是运算的合理性,而不是数的真理性,大概在公元前400年左右就创造了负数和零的概念。而在西方直到公元7世纪(唐代)的一本印度人的著作中才出现负数,它被用来表示负债。西方人...2009-02-07 22:12:57 · 781 阅读 · 0 评论 -
主从分解而不是正交分解
说到分解,很多人心中的意象大概只有正交分解。正交分解无疑是最重要的一种分析方法,它也是所谓“分而治之”思想最常见的实现策略。但是正交分解一般潜在的假定是分解后的子部分是大致均衡的,它们是相对具有独立价值的,可以彼此脱离独立发展。这是分解后实现系统解耦的重要原因。http://canonical.iteye.com/blog/33885 但是物理学中另一种重要的分析学思想是微扰论(Pertur...2008-05-26 00:36:02 · 168 阅读 · 0 评论 -
从编写代码到制造代码
软件开发作为一种工程技术,它所研究的一个重点就是如何才能有效降低软件产品的研发成本。在这一方向上,组件技术取得了空前的成功。它所提供的基本图景是像搭积木一样从无到有的组装出最终的产品。在某种意义上,这是对现代建筑工业的模仿和致敬。新材料,预制件,框架结构,这些建筑学的进展在软件领域被一一复制,建筑工地上的民工自然也成为了程序员们学习的楷模。毕竟,在组件的世界中码代码,基本上也是一种“搬砖”...2009-02-15 18:15:27 · 148 阅读 · 0 评论 -
类型化:形而上学的信仰
有一个心理学实验,要求被试者将青草,公鸡,牛三个东西分成两组,结果多数中国儿童将青草和牛分成一组,而多数美国儿童将公鸡和牛分成一组。中国人的思想中青草和牛之间存在现实的关系,牛吃草,而西方人的典型逻辑是公鸡和牛都属于动物这一范畴。通过分类将物体类型化,这是西方人从小就接受的训练。据说美国婴儿学习名词的速度要快于动词,而中国的婴儿则相反,这并不是偶然的。 中国...2009-02-21 19:38:50 · 151 阅读 · 0 评论 -
同构与同态:认识同一性
现代数学是建立在等价类这一概念的基础之上的。同构是对等价关系的一种刻划。简单的可以把它理解为两个系统之间的一种“保持”运算规则的一一对应关系。在数学中一个符号所代表的是所有能够互相同构的对象。例如整数3可以看作是与某个元素个数为3的集合可以建立一一对应关系的所有的集合所构成的整体。所以在数学中,如果我们解决某个特定的问题,它同时也就意味着我们解决了一系列相互等价的问题。 同构关系对...2009-02-28 16:52:55 · 1116 阅读 · 0 评论 -
解析SOA
http://www.xml.com/pub/a/ws/2003/09/30/soa.htmlhttp://canonical.blogdriver.com/canonical/809426.html 随着IBM, Microsoft这些世界级大厂商不遗余力的推销,SOA(Service OrientedA...2006-03-04 23:51:00 · 97 阅读 · 0 评论 -
[导入]我看OO的哲学
http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!248.entry 物理和数学的新分支的产生多半有着哲理性的开端,而软件中OO技术的兴起想必也是有一定的哲学基础的。但哲学是一种整体的,超越的认识,当我们在实际的应用中走得越远,就会发现现实的操作距离哲学的理想越远。早期面向对象总是鼓吹对现实世界的...2006-01-23 23:11:00 · 184 阅读 · 0 评论 -
[导入]结构构造的成本
在我看来,软件开发就是一个从二进制指令构造出一些高级结构的过程(frombinary chaos to artificialintelligence)。这种构造依赖于我们控制各种结构的能力。结构化编程向我们展现了一个机械化的分解与合成的世界,但这个世界与我们的真实世界却差异良多。于是,面向对象编程试图直接跳跃到真实的世界,依赖于我们对真实世界中结构的控制能力,直接对真实的结构建模。早...2006-01-23 23:03:00 · 87 阅读 · 0 评论 -
[导入]代码复用(reuse
代码复用包括两个方面:概念复用和实现复用。这两者在C++的虚拟函数设计中是合二为一的,结果概念上的模糊往往造成继承机制的滥用。为了复用我们往往在基类中塞入过多的职责,并在程序中制造了过多的层次。java的interface是纯粹的概念复用机制,实现方面的复用我们一般通过Impls类或者Utils类来进行,即将代码片断写为静态函数。一般应该避免在类中写特别多的帮助性成员函数,因为成员函数...2006-01-23 23:01:00 · 192 阅读 · 0 评论 -
架构的可退化性与无侵入性
架构的可退化性(degragation)指的是架构的结构可以从元素比较丰富,层次比较多,比较复杂的情况退化到比较简单的情况,而架构的无侵入性(non-invasive)指的是架构对于外部接入对象没有特殊的形式要求, 一般通过依赖注入(dependencyinjection)向接入的外部对象推送信息. 这两个概念之间存在着紧密的关联, 但并不等同. 无侵入性可以看作是架构的一种局部可退化...2005-12-22 22:55:00 · 161 阅读 · 0 评论 -
[导入]反问题的级列求解
实际观测到的结果是系统内在结构的外在表现,而软件开发是从需求分析开始,经历系统分析,设计并实现的过程,即从用户需求逆推出软件的结构。这种根据外在表现求解内部结构的模型的过程,在数学上称为反问题(inverseproblem)。关于反问题,一个众所周知的难点在于解的不适定性。因为不同的结构可以有类似的外在表现,因而反问题的解是不稳定的。在一个既定的情况下,我们按照某种粗略的外在度量标准...2005-12-27 01:22:00 · 105 阅读 · 0 评论 -
[导入]设计的可扩展性
敏捷思想的流行使得很多人对可扩展设计产生了一种怀疑的态度。这有几方面的原因,一方面是J2EE平台本身提供的分布式机制等技术因素很容易诱导你定义不必要的扩展需求,第二是基于目前的技术手段对于程序结构的分解仍然有着很大限制,具体的程序实现中往往会引入某种强制依赖,削弱了潜在的可扩展性,第三则是设计者本身对于技术和业务的把握不够深入,在考虑设计的可扩展性时经常做出错误的判断。但是一个只满足当...2005-12-27 01:24:00 · 112 阅读 · 0 评论 -
[导入]概念的连续性
近代数学和物理学的发端是从微积分的发现开始的,人类第一次系统化的将连续性的思想推向了极限,也开创了崭新的思维方式。记得高中自学微积分的时候我也花了很多时间去思考连续性的问题,但是后来渐渐习以为常了。研究生的时候重新开始考虑连续性的问题,只是关注的方向是概念体系中的连续性。 all ornothing是我们的思维中经常出现的一个误区。很多时候我们的讨论局域在一个封闭的既定的体系中...2005-12-27 01:25:00 · 214 阅读 · 0 评论 -
关于级列设计理论
级列理论是分析学中常见的一个思维框架,我只是把它从我最熟悉的物理学中借用到软件设计领域而已,它本身并不是我所创造的一种概念(创造是艰难的)。在某些领域,这一分析框架可以表现出完美的数学特性,如时频分析领域的小波分析(wavelet),统计学习理论中的支持向量机(Support Vector Machine),分子动力学中的BBGKY级列等等。在其他一些领域它的精确性可能要弱很多,但其...2005-12-27 01:27:00 · 123 阅读 · 0 评论 -
一般性不等于抽象性
级列设计理论中我们谈到一般和特殊的关系, 但这是否指的是“相对抽象” 以及 “相对具体”之间的关系,而“一般”到“特殊”和“特殊”到“一般”这两个方向是否指的是具化过程和抽象泛化过程?我猜测有这种想法的人大概是受到软件设计中所谓抽象封装思想的影响. 很显然, 我并不是这样认为的. 一般性(普遍性)与抽象性是不同的概念.在物理学中相对论是比Newton力学更加一般性的理论,但它和New...2005-12-27 22:21:00 · 189 阅读 · 0 评论 -
[导入]程序中的结构表达
循环结构是imperativelanguage的重要组成部分,一般也是程序中比较难以理解的部分。特别是没有软件技术背景的朋友,明显对于循环的理解力较弱。在Von Neumann体系结构中,赋值语句是必须的,因而引出了存储概念,也引入了时间概念,因为我们可以区分出赋值前和赋值后的时刻。引入时间之后,本质性的影响是程序串行化,而强迫我们从并行思考转入串行处理。很多时候这是一种不自然的情况,在...2005-12-28 22:49:00 · 84 阅读 · 0 评论 -
[导入]过度设计与设计不足
Agile批评过度设计(over-engineering)的声音很大,但对于设计不足(under-engineering)同样是持坚决的否定态度的。修改过度设计的应用比修改设计不足的程序要容易的多。因为简化的途径是明确的,而走向复杂的途径却往往是难以控制的。Refactoring ToPatterns试图引入一些经验,但这些可预见的调整多半只在细节处,其影响是局部的。一个复杂性低层次...2005-12-28 23:11:00 · 165 阅读 · 0 评论 -
分析要适可而止
在软件设计中分层应该是越少越好, 过度分解一般都是有害的.虽然说复杂的事物分解之后一般可以得到一些较简单的组成成分, 但这并不是必然有用的. 分析学成功的关键在于分解之后的组分能够出现大量重叠的情况,参见软件中的分析学 http://canonical.blogdriver.com/canonical/555330.html 当分解到一定程度之后我们未必能够发现可以重用的部分....2005-12-29 23:58:00 · 95 阅读 · 0 评论 -
[导入]多谈结构,少谈OO
我其实很少谈到OO这个概念,一般情况下我只提结构的表达与结构的控制。软件开发是一个从二进制指令构造出一些高级结构的过程。无论是PO, OO,还是XO,只要它能有效的降低这种结构构造过程的复杂性,能够增强我们对程序结构的表达和控制能力,那么它就是有价值的。在我看来,继承(inheritance)必然是有用的,因为它是一种表达推理结构的方式而无论它的概念诠释是什么。行为函数聚合在对象的名义...2006-03-04 23:54:00 · 104 阅读 · 0 评论 -
[导入]设计的刚性与弹性
最近强调弹性设计的比较多,大概是因为需求的多变太令人挠头了吧。但从道理上说,一个良好的设计必然是刚柔并济的。所谓没有规矩不成方圆,你能想象没有钢筋骨架结构的高楼吗。在基础核心架构方面特别需要适当的刚性和足够的稳定性,需要用接口明确表达出将用到的假设。内核稳定了,固化了,外围的aspect才能安全的织入到系统体系架构中来。象变形金刚那样的自由组合变化的结构(在流动结构与固化结构之间转换)...2006-03-04 23:57:00 · 145 阅读 · 0 评论 -
软件与建筑
建筑学的隐喻在软件业中一直很流行。开发软件和建筑楼房从某种意义上说都是一种构造过程,而建筑学的成熟无疑让很多软件工程师非常羡慕。Design Pattern的始作俑者坦承受到建筑学著作的影响更是让一些人对建筑学的精深顶礼膜拜不已。不过,建筑决不只是表面上的形象/功能设计,也决不是民工就可以干的活计,在现代建筑设计背后是土木工程的蓬勃发展。正是框架结构的出现和材料工艺的进步才使得批量...2007-09-09 19:59:24 · 239 阅读 · 0 评论 -
Witrix架构分析
Witrix开发平台基于级列设计理论发展了一系列新的设计思想和软件分解机制。并提出了一种新的Web体系架构。http://canonical.iteye.com/blog/33824 Witrix架构呈"可"字形态,其中定义了三条主要的分界线:1. 浏览器和服务器之间通过语义结构明晰的URL形成两分结构。http://canonical.iteye.com/bl...2007-09-23 23:40:00 · 185 阅读 · 0 评论 -
软件不同于建筑
软件系统的构建之所以与建筑工程不同,无法达到建筑工程的精确性和可控性,其中一个很重要的原因在于建筑的产物是一个静态的结构,建筑的过程主要是采用各种预制件填充某个规划好的建筑空间,而软件是一种动态运行的产品,它的各个组成部分之间的关系不是可以静态描述的,而是存在着复杂的交互关系,而且软件在运行的过程中还需要根据需求的变化进行动态的调整,这种动态性使得软件开发中很难抽象出固定的预制件,很难像建筑...2008-09-01 23:26:03 · 273 阅读 · 0 评论 -
结构的稳定性
结构的稳定性,直观的理解起来,就是结构在存在外部扰动的情况下长时间保持某种形式不变性的能力。稳定意味着小的扰动造成的后果也是“小”的。在数学中,Taylor级数为我们描绘了变化传播的基本图景。F(x0 + dx) = F(x0) + F'(x0)*dx + 0.5*F''(x0)*dx^2 + ... 扰动dx可能在系统F中引发非常复杂的作用过程,在系统各处产生一个个局部变化结...2009-12-06 12:17:52 · 975 阅读 · 0 评论 -
行为聚集
软件开发技术的技术本质在于对代码结构的有效控制. 我们需要能够有效的分解/重组代码片断, 凸显设计意图. 面向对象是目前最常见的代码组织技术. 典型的, 它可以处理如下模式 A1 --> B2, A2 --> B2, A3 --> B3 ...我们观察到A1和A2之间, B2和B2之间具有某种概念关联性, 同时存在某种抽象结构 [A] --> [B]....2009-07-11 21:34:49 · 157 阅读 · 0 评论 -
关于代码生成和DSL
代码生成(Code Generation)本身是一个非常宏大的概念。从某种意义上说,当我们明确了计算的意义之后,所做的一切都只是一系列代码生成的过程,最终的目标是生成某种可执行的机器码。对web程序员来说,代码生成是最熟悉不过的了,每天我们所做的工作就是JSP=>Servlet=>HTML。不过,现在多数人脑海中的代码生成,指的一般只是根据配置输出一个或多个程序文本的过程,...2008-11-23 11:52:11 · 993 阅读 · 0 评论 -
结构的自足性
说到软件建模,一个常见的论调是模型应该符合实际需求,反映问题的本质。但是何谓本质,却是没有先验定义的。在成功的建立一个模型之前,无论在内涵上还是在外延上我们都很难说清楚一个问题的本质是什么。如果将模型看作是对领域结构的一种显式描述和表达,我们可以首先考察一下一个“合适”的结构应该具备哪些特征。 按照结构主义哲学的观点,结构具有三个要素:整体性,具有转换规律或法则(转换性),自身调整性...2009-10-07 16:59:28 · 216 阅读 · 0 评论 -
模型驱动的数学原理
一种技术思想如果确实能够简化编程,有效降低系统构造的复杂性,那么它必然具有某种内在的数学解释。反之,无论一种技术机制显得如何华丽高深,如果它没有清晰的数学图象,那么就很难证明自身存在的价值。对于模型驱动架构(MDA),我长期以来一直都持有一种批判态度。(Physical Model Driven http://canonical.iteye.com/blog/29412)。原因就在于“...2011-02-07 02:45:43 · 341 阅读 · 0 评论 -
业务架构平台的自举问题
业务架构平台的设计与实现要比普通业务系统困难很多。一个核心难点在于如何建立普遍有效的应用程序模型,如何控制各种偶然性的业务需求对系统整体架构的冲击。大多数现有的业务架构平台都是提供了一个庞大的万能性产品,它试图预料到了所有可能在业务系统开发中出现的可能性,并提供了相应的处理手段,结果业务系统开发人员的能力被限定在业务架构平台所允许的范围之内。如果业务架构平台的复杂度为A+,则我们最多只能用...2011-02-11 14:00:15 · 201 阅读 · 0 评论 -
结构的消解
程序中大量的工作其实都是在定义结构以及结构之间的关系. 一般情况下我们应该识别出结构,并把它们封装到函数,对象和组件中去. 但是封装并不永远都是有利的. 将某个结构独立出来, 在某种程度上也就割裂了它和其他元素之间的关系, 这会引发结构融合的障碍, 也会造成思维上的负担. 事实上如果程序整体具有足够的可理解性和概念稳定性, 我们并不需要独立识别出什么子部分. 一个简单的例子是数组循环. 一...2007-09-02 09:45:55 · 130 阅读 · 0 评论 -
Why Use Meta
元数据(meta)是描述数据的数据。它所描述的有一部分是数据本身的特性,如字段的长度,精度等,另外一部分描述的则是我们使用这些数据的可行方式和目的等。使用meta可以在程序中更加清楚的表达出我们的意图。例如现在需要在界面上显示一个列表,我们的意图未必是要在界面上显示指定的字段A, 字段B,字段C对应的列,而是"显示那些应该显示在列表中的字段"。这一看似同义反复的表述,如果采用元数据表达,则成...2007-08-19 13:37:59 · 114 阅读 · 0 评论 -
关于ORM
ORM(Object Relational Mapping)技术为什么是有效的?对这个问题一般的答案是ORM解决了面向对象技术和关系数据库之间的阻抗匹配问题。但是任何一种成功的技术,它的支持理由都不会是单一的。在Witrix平台的实践中,ORM的如下几个特性是关键性的: 1. 主键和对象之间的一一对应关系。在Web应用中,前台浏览器持有的只能是对象的某种表示, 因此一种locator机制是...2007-08-13 00:15:32 · 111 阅读 · 0 评论 -
关于元数据(metadata)设计
目前的框架设计中,引入元数据(metadata)已经是必然的事情,jdk5.0的annotation机制也为metadata的物理驻留位置提供了新的选择。常见的一些元数据设计方案中往往是元数据直接驱动系统的展现甚至运行过程(例如普元EOS),大有完全取代程序代码的趋势,这无疑是对元数据概念的一种滥用。一般在界面层所使用的元数据其实类似于某种新的界面描述语言,即某种特定目的的DSL(d...2006-03-25 11:19:00 · 2078 阅读 · 0 评论 -
关于DSL
关于DSL(Domain Specific Language)的确切含义纷争很多,但是其核心观念还是很明确的。DSL的关键是使用领域特定的概念,即它的概念系统中具有一些非General Purpose的基元。但是这种所谓非General Purpose仅是就诠释层面而言,它所指的并不是DSL对应的形式系统。例如,在物理学中声波(sonic wave)无疑是对原子系统的集团运动模式的一...2006-03-25 11:24:00 · 198 阅读 · 0 评论 -
[导入]关于对象的两个注解
1. 对象的一个特性是局域化。每一个对象函数(非静态函数)都是在对象的上下文中调用的,因而隐含假设了一定的环境信息,这些信息以封装的形式被使用。 一个具体的体现是函数的命名,如果没有对象,我们必须给函数进行全局命名,例如 find_friends, find_users, find_departments, 而在对象的环境下,我们可以抽象出一个采用局域化命名的接口 IQueriable....2006-03-25 11:36:00 · 117 阅读 · 0 评论 -
设计不等于创造
软件设计虽然是需要智力付出的一种过程,但是它并不意味着必然产生出一些创造性的东西. 一般的设计工作只是将业务架构映射到一个通用的软件技术架构上. 这就如同大多数时候我们只是应用某个算法来解决具体问题, 而不是发明一个新的算法一样. 最近所见的一些失败的设计, 其关键问题往往不是简单的过度设计的问题, 而完全是一种错误的设计. 当我们试图在软件中创造一种新的关联关系, 建立一种新的交互方式和...2006-04-16 22:16:00 · 119 阅读 · 0 评论