
架构设计
文章平均质量分 73
韩小明
刚刚当上父亲的男人
展开
-
企业级系统架构和工具类软件架构的区别
今天同事问起在系统中使用Web Service有什么用处,和一般的直接写在客户端有什么区别,有什么好处?回答这个问题,确实有点意思。因为既然问了这个问题,就说明有一些前提的没有达成一致,直接解释技术本身,是很容易事倍功半的。因此首先搞清楚,推荐使用SOA架构的背景,是我们在做企业内部的信息化工作。在这个大背景下,我们再来探讨SOA是不是好的问题。否则,SOA不一定是最好的方式。那么原创 2009-12-29 01:16:00 · 9754 阅读 · 29 评论 -
何以证明你的设计优秀?
我想很多人都饱受过糟糕软件设计的痛苦,因此心里总有一股气,自己一定要做一个非常优秀的设计。至少我是这样的人。近日公司的一个项目进行TR1评审的时候,在技术方案的评估文档中,我发现其第一项列出的便是上一个版本存在的设计缺陷: 产品之间复用只是停留在代码级别 模块代码不够独立,后期不能复用 模块代码不易扩原创 2007-03-30 02:16:00 · 6690 阅读 · 28 评论 -
探索流(Stream)的概念
从一开始接触,就感觉流(Stream)是一个非常抽象的概念。在C语言中,有三个标准流:StdIn,StdOut,StdErr。那个时候的感觉,用我的L同事的话来说,流就是一个神秘的洞。我一直在探究流的概念。到底什么是流,流有什么特点,Delphi中的TStream到底和真正的流的概念相差多少?可惜一直没有合理的答案发现。前一段时间,开始对YAML 有了兴趣。在这里也顺便对YAML 进行简单原创 2007-03-28 23:52:00 · 3321 阅读 · 6 评论 -
更坏就是更好(Worse Is Better)
我非常愿意将这个观点介绍给大家,第一是它并不被很多人所知,更重要的是它有非常深刻的内涵道理。发展历史这是Richard P. Gabriel 先生根据自己的亲身经历得出的著名论断。Gabiel在Lisp编程语言特别是Common Lisp上的著名专家。在1985~1994之间,他有一家Lisp公司,名字叫Lucid。但是运营的境况并不是很好。在1989年的一次Lucid走廊会谈中,他被一些原创 2007-03-26 00:32:00 · 8199 阅读 · 5 评论 -
房间收拾与软件架构
首先,请允许我做这样一个对比,毕竟,这两件事看上去太没有关系了。事实上,我捉摸房间收拾这个事情的时候,压根就没有想过和工作联系在一起。可是最后竟然走在了一起。不是每一个人都需要收拾房间,但是每一个人都可以花点时间研究一下收拾房间的方法。我目前一个人住在北京的自己的房间里,女友偶尔来一下。大家可以想像得出,这种情况下,房间的状况如何。基本有两点: 房间整洁程度较低原创 2007-03-18 21:41:00 · 3099 阅读 · 5 评论 -
浩方战网平台分析
虽然早就听说过浩方是如何工作起来的。但要真正说到其细节,还是可以深入地探究一下。很多都应该知道,浩方本质上是将整个Internet变成若干个大的局域网的方式,让所有游戏在这个“局域网”上运行。那么,浩方是如何架构这样的系统的呢?下面的所有的分析,使用大家熟知的星际争霸作为例子。首先先看看星际在局域网上运行的方案。我们这里不分析UDP协议的。有兴趣的可以深入探讨。 两个不同的星际实例原创 2007-01-26 04:12:00 · 8603 阅读 · 21 评论 -
语言的座右铭
今天和同事做了一件非常有意思的事,那就是探究各种语言在设计初期的主导思想,很多设计者,称这个思想叫座右铭。因此,语言也因为设计者而拥有了座右铭。我们搜索了几个语言,拿出来和大家分享一下。如果大家有不同意见或者有补充的,可以在下面继续跟上,我会陆续补充到文章中。不过为了不让大家误会本文的意思,我在文章的前面,将意思说清楚。我们在学习语言的时候,往往是从语法开始的。可是如果我们已经跨越了这一层原创 2007-01-24 00:37:00 · 2666 阅读 · 1 评论 -
代理(Proxy)模式 vs. 代理(Agency)机构
有一天,我将设计模式中的代理模式和我们社会中的代理机构联系起来。发现他们之间有非常多的相似的地方,而且可以互相借鉴。在讨论这个话题之前,我的老板就率先指出了我的缺点。代理是Proxy不是Agency。Proxy一般指协议,和生活中的代理机构Agent是不一样的哦。不过我想说的是,所以我们才应该感叹中国汉语之博大精深,以及设计模式翻译的如何巧妙了。对比并不一定是一件快乐的事,但是对比和讨论往原创 2007-03-17 21:46:00 · 4511 阅读 · 0 评论 -
梦里的题目:让我安全回家
并不是要说明做梦的神奇,确实是感觉这个题目非常有意思,所以拿出来和大家分享。近日一次做梦,梦到做一张试卷。试卷上题目非常少。其他的题目不记得了,只是记得最后一道题目。这个题目是这样描述的:请用计算机实现,只要我安全到家,任务就算完成。我开始被这个题目搞得一塌糊涂。根本不知道啥意思。 这时候梦里有人有人提示符号。我突然有所醒悟。这是一道类似于微软那些面试类型的题目。重点不在于结果如何原创 2007-04-03 23:01:00 · 3410 阅读 · 5 评论 -
生活中关于清点人数之设计
一提到数据结构,大家想起的都是计算机程序中的。到现实生活中,人们却往往容易忽视设计好的数据结构的重要性。这次优快云英雄会过程活动组织中,遇到一个需求。由于各路英雄众多,所以优快云在组织的时候,经常需要清点人数。而优快云的做法是这样的,由领队拿着一张名单,依此报出名字,在场的人喊声“到”。我相信这是中国特色的清点方式。事实上,我们喊“到”的经验一定不少,以至于很多人都不愿意被迫喊这个字原创 2007-04-11 00:36:00 · 2230 阅读 · 4 评论 -
从职责归属看数据库中关系设计
今天和领导讨论组织结构中的职责归属的时候,讨论到TMT(技术委员会)和CTT(公共技术小组)中(TMT是CTT的上层组织),如果有大的攻关技术任务,是将职责归属到CTT好呢,还是将职责归属到TMT好。我以为CTT负责好,第一是因为我在CTT;第二我认为TMT是做决策的,具体的事情就该CTT来做。但是领导认为应该属于TMT。原因是这样的,组织中职责是分解的,如果归属到TMT,TMT就会负责CTT原创 2007-04-22 00:26:00 · 1968 阅读 · 0 评论 -
SOA的本质是组织设计的一个模式一个方法
SOA = 5S本文中的5S是指麦肯锡企业管理的7S方法论中,除了愿景和战略之外的5个S,包括(系统Systems、组织Structure、能力Skills、人力Staff、文化Style)。可以参考资料:麦肯锡7S模型很多人都在说SOA,但是真正能够把S原创 2010-01-17 20:51:00 · 3091 阅读 · 8 评论 -
架构师必须补充的能力
这段时间,看到网上有关于系统架构师应该具备的能力,我深深不以为然。诚然,技术的东西还是要掌握的,但是我认为,而且也坚决地认为大家应该转变想法,架构师,需要具备的不光光是技术能力,更重要的是“系统思考能力”与“思维组织能力”。系统思考能力,这其中的系统,不是简简单单指的是咱们开发的软件系统,而是软件所处于企业应用场景中的系统。说白了就是,解决用户实际问题的整体方案,叫系统。因此要切记原创 2009-05-24 22:21:00 · 1612 阅读 · 6 评论 -
合格架构师的目标管理
“一个系统的架构,做到如何才能算好呢?”明眼人都能看出,这个问题就是问系统架构的目标。其实这个话题已经和很多人讨论过。一个非常简单的开头,结果却可能是千篇一律的答案。“将系统做到可维护、可扩展、可延伸等等...那么这个系统就不错了。”这个答案是一个典型的程序员式的目标管理。可以看出,这是一个非常完美的目标。但我要说,这不是真正的目标。如果你正在作为一个架构师,在架构一个新的系统。我想问问你原创 2008-05-04 17:24:00 · 1988 阅读 · 4 评论 -
性能设计中的平衡-提防物极必反
这是一个非常有意思且非常发人深省的案例。公司在做一个组件的时候,一开始就以追求最高效率为目标。因此在制定方案的时候,采用了全部在内存中操作,从而获取最佳效率。但是随着应用中的数据量的提升,效率在空间面前,越来越成为问题。这个案例有意思的地方就是,最初是为了追求最好的效率,最后反而没有得到好的效率。但又反过来让我们来思考为什么会出现这种情况呢?xiammy想到的的第一个问题在于:空间和时原创 2007-09-30 07:16:00 · 3657 阅读 · 10 评论 -
剪贴板中的观察者(Observer)模式
最近因为工作需要,使用到了剪贴板的特殊功能。也翻阅了一些网上介绍的资料,发现要实现类似FlashGet那样下载工具中监视剪贴板的实现方式,对我们程序设计有点借鉴的意义。在Windows提供的剪贴板API中,针对监视这块,提供的是注册机制。主要函数是SetClipboardViewer这个API函数。这个函数的声明是这样的(Delphi):function SetClipboardViewe原创 2007-08-30 23:18:00 · 3732 阅读 · 6 评论 -
小谈子对象中接口的设计原则
今天和同事在讨论接口的设计原则的时候,总结了一个原则点。虽然简单,也拿出来和大家一起分享。问题对象在实现接口的同时,由于需要提供访问子接口的服务。最正常的设计可能是下面的。 但是,如果是另外一个情况呢?看看下面的组合方式吧: 小析事情变得有点有趣了。往往就是这样,只有一个的时候,没有人会怀疑。只有出现多个的时候,争吵才开始了。所谓一个和尚挑水喝,两个和尚抬水喝,三个和尚原创 2007-05-09 00:01:00 · 3760 阅读 · 4 评论 -
老书推荐:架构师应该关注的技术之外的东西
推荐书目:《软件架构:组织原则与模式》 之所以推荐此书,是这本书让我真正了解什么叫开卷有益!我打开这本书的时候是凌晨,但是我打开的时候,就放弃了睡觉的念头。虽然最后还是困得睡着了,但是第二天一天时间都全新扑在这本书上面。不过我必须提醒的是,这本书我买下的时候,并没有感觉有多么有用。也就是说,如果你没有这方面的工作经验的话,看这本书会感觉不知所云,或者不能深刻体会作者写作的意图。因此,如原创 2007-04-25 01:23:00 · 3540 阅读 · 0 评论 -
算法设计应该依赖抽象而不是业务
很多时候,算法的设计是归属于详细设计阶段的。一些公司甚至都没有设计而直接编码。这些往往导致很多算法的实现都混杂在业务模块中。典型的特点是,这些算法会依赖于业务实体的某些属性的实现。举一个简单的例子,我曾经做过一个项目中,遇到一个排序功能:分部整理。这个排序比我们以往所学的排序不一样,所以很多人都不将它作为算法来看待,而是直接做为业务逻辑功能进行实现。 排序的基础数原创 2007-04-22 10:54:00 · 2409 阅读 · 5 评论 -
面向对象学习史
请不要误会,这个不是在将面向对象发展史。只是说说我和几位同事在聊各自学习面向对象的过程。感觉很有意思。特意拿出来与大家分享。我最近在思考写一个系列的面向对象的文章。找不到思路,于是请了几位同事,请教他们在学习面向对象过程中的想法。下面是他们的说法。J君: 在大学里学的C语言,C++和java是自学的。 开始是理论派,视面向对象原创 2007-03-09 13:21:00 · 2158 阅读 · 1 评论 -
我的架构师学习计划
这份计划写出来和大家共勉,其实也是希望了解大家怎么来学习的。说起来也很简单,就是完成几件事而已。1、掌握十个流行框架架构。主要考虑开源系统,特别是JAVA领域的系统,类似与JBoss、Spring、Hibernate、Weblogic等等。2、完成五次技术讲座。主要是保证对讲座的内容进行深入细致的理解。这样的讲解才可能成功。另外也是为了提升作为架构师的可能的影响力。3、完成五篇架构文原创 2007-01-22 03:26:00 · 8858 阅读 · 30 评论 -
什么是单点登陆SSO
什么是单点登陆单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。单点登陆的技术实现机制当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登转载 2007-01-18 22:14:00 · 3961 阅读 · 2 评论 -
业务平台--摸不准的理念?
在应用软件领域,最近一直被吹捧的技术就是平台。但是,对于平台的理解,却不是很统一。各行各业也没有一个准确的定义。基本上每个稍微有点实力的公司都推出了自己的平台。可是,平台到底是什么呢?回答平台是什么不是很容易。不过可以从它产生的目的开始探讨。说得高一点,平台的出现,是剩余价值追求的产物。换句话说,就是要提高开发效率,减少人力成本。使得开发一个新的项目、产品,可以很容易!平台的诞生原创 2006-11-30 22:29:00 · 2837 阅读 · 2 评论 -
借火车看设计过程
在去野三坡的途中,和Linc谈起火车的架构来,感觉其扩展性特别好。车厢可以载人,可以载媒,可以载货,可以载坦克,可以载飞机,火车头可以有一个,也可以有多个,可以在两头,可以在中间。回来以此为题,大家一起讨论一下设计。一直认为,设计如哲学一样,大道同源。其道理一定可以应用到各个领域。因此火车也需要设计,因此软件也需要设计。那好,我们开始设计吧。这时候,你想到了什么?火车的扩展性原创 2006-11-29 11:28:00 · 3418 阅读 · 9 评论 -
接口设计之误区
非常感谢大家对接口的几篇文章的关注和支持。特别补充一段我理解的接口设计中的误区。误区之一:采用对象式设计OO思想在设计师人群里已经深入人心。往往一谈到设计,就会想起对象。他们对对象的抽提能力机会已经炉火纯青,驾轻就熟。然而,也正是因为这点,所以才容易以面向对象的方法去思考接口设计。对象的在业务领域中是一个立体的影像。对于立体的影像,很容易吸引大家的眼球。如果我们眼中看到的只原创 2006-11-25 21:34:00 · 2310 阅读 · 5 评论 -
面向接口设计(Interface Oriented Design)
我在网上搜索这个概念的时候,发现在中国还很少有此类文章,外国有一本同名书籍出版,但是无缘拜读。所以这个概念基本是我自己杜撰出来的,只是网上也有同名而已。 先说说,什么是接口。这是个老问题,可是在设计之前,必须先将此定义清楚。 一个常见的定义是,接口就是契约。我认为这个定义非常模糊。契约是约定双方的有一定法律或道德效应的说明。但是,第一,中国人不原创 2006-11-25 00:05:00 · 4358 阅读 · 13 评论 -
也谈西直门桥的设计
下面就是著名的西直门桥的右转指示图:这个桥在从两个方向上过来的右转都必须经过三圈或者五圈。任何新司机都惧怕这里,任何老司机都激动这里。就因为此,还有人编写了一段笑话: 中国联通壮告西直门立交桥设计者一日,中国联通董事长王建宙坐在车后座上无线上网,车在北京的街头和汽车洪流中走走停停.王总突然感觉累了,于是合上电脑,放眼望向窗外.“这是什么桥,这么大?”王原创 2006-11-25 23:58:00 · 4649 阅读 · 5 评论 -
HOOK启思录---第一章 HOOK的发展
非常遗憾,HOOK的发展史不是那么清晰可见。事实上,HOOK到底是什么,很多人的说法都不一样。最早是在操作系统中出现的HOOK概念。在Unix/Linux/Windows中都有类似概念。当时提出的目的在于,允许用户在系统调用过程中,插入自己的代码处理特殊事情。典型的HOOK就是用自己的功能替换原有的函数点,在处理完成之后,又恢复原有的函数点。(这里“点”就是表示一个可以原创 2006-11-21 01:13:00 · 7002 阅读 · 11 评论 -
HOOK启思录---第二章 HOOK的根源
我一直在避免写HOOK的技术实现,想尽可能地将一些看不到的东西收集起来。相对于了解一个成熟的技术,还不如去了解其中的思想吧。我是这样认为的。这一章会暂时远离HOOK本身,我们会尝试着去思考这些技术出现的根源。很多人象我一样,从OP的衰败中走向OO的繁荣。软件的复杂度也是突飞猛进。当年“没有银弹”的断言,非常准确地说明了软件的发展趋势,当新技术发展的时候,软件的复杂度也随之发展。我们现原创 2006-11-22 22:33:00 · 5140 阅读 · 10 评论 -
人与OO
转载请注明: http://normalsoft.spaces.live.com/blog/cns!AF8C29F59CAD938E!353.entry 能将OO与人并列去讲,着实费了我很大的劲。可是经过一段简单的比较,发现两者自己的相同之处确实很多! 我们先将这个比方说出来,假设针对我们OO中的每种对象,对应与社会上每一个人,他们千差万别,但都同时满足一个相同点:对象原创 2006-10-30 00:24:00 · 1935 阅读 · 0 评论 -
不要因为不知,所以设计
我们经常在设计的时候,会出现设计粒度的问题。这是一个非常难以把握的。很多时候,我们处理这个问题的时候,会有来自不同方面的意见。认为再细的理由,一般来自扩展性。而来自稍微粗一点的理由,一般都是复杂度。在最近的讨论中,经常听到的是关于扩展性的趋向。可是我们却在慢慢地忘记了一个根本问题:需求分析!说一个大家可能不爱听的话。大部分系统分析工程师,都是从程序员转过来的。因为大家不是专业的业务专家,所原创 2006-12-11 00:26:00 · 2172 阅读 · 1 评论 -
软件和烹饪
要做软件很简单。但是要做一个好软件,那自是非常难。中间很多细节我们都归类为设计,可是这设计却可分为不同层面的,有关于格局的,有关注流程方面的,有关注细节实现的。做软件就像做一桌菜一样。先要考虑菜的风格。考虑客人的喜好,是做一桌好菜必须了解的。喜欢淮阳菜的,你让他吃川菜,这会让客人很不舒服。至少,他不会感觉好!当年康熙皇帝60大寿宴会上,满汉全席的设计很好的体现了康熙大帝执政中的满汉一原创 2006-12-11 04:38:00 · 2921 阅读 · 2 评论 -
面向各维度的软件复用
复用!使我们软件工作者梦寐以求的目标。所谓复用,就是在不改变原有代码的情况下,重复使用原有代码。面向对象(OO)技术的三个基本特点都是为了复用。 封装。这个本就是为了复用。是对复杂数据结构的复用。事实上,封装并不是只有在OO在才出现的。 继承。是对基类代码的复用。派生类在不改变基类的情况下,复用了基类的代码。原创 2006-12-16 21:13:00 · 2674 阅读 · 3 评论 -
足球解说与系统架构--怀念黄健翔的日子
近来看中央台足球转播的时候,经常性地走神,这是因为经常容易受到评说员的干扰:或觉得评说的太无聊,或感觉他们配合得太滑稽。不管怎么说,总是容易让我想起黄同志还在的时候。事实上,自我从大学时候开始喜欢足球以来,就是一直听他的评说。偶尔也会看看地方台(中央台经常不转播冠军杯),都是硬着头皮去听,尽量不让评说的干扰我看球。很多事情就是这样,失去的时候才知道存在很多差距。当然了,我喜欢黄同志,并不仅仅是原创 2007-01-17 22:25:00 · 3247 阅读 · 4 评论 -
数据接口设计中遗漏的版本差异
我们在考虑数据接口的设计的时候,最容易关注的是数据本身的接口。简单点说,要哪些数据,我接口设计的时候就加入那些数据。在此基础上再考虑数据结构以及结构优化。这些并没有什么问题。事实上,也只有考虑这些,接口才可以基本工作起来。不过,一个设计好的接口会比一般的接口多注意一些因素,一些以后可能发生变化的因素。在好的接口中,有些接口,一直不需要修改;有些接口修改了也和原有接口兼容。一个接口一直都不需原创 2007-03-05 22:22:00 · 2299 阅读 · 0 评论 -
设计的三个境界:见山三部曲
青山禅师在回顾自己的参禅经历的时候这样说:“三十年前未参禅时,见山是山,见水是水。及至后来,亲见知识,有个入处。见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水……”这段话是典型的中国式的智慧,只可意会不可言传。参禅如此,设计不也是如此嘛。对禅学我是非常不通,要我解说更是容易招来大师的指责。不过既然和设计相通,我却想借用见山三部曲来衡量设计的境界。王国维在《人间词话》说:原创 2007-01-16 12:14:00 · 3198 阅读 · 2 评论 -
戏说动漫柯南的剧本架构
现在很多成年人都爱看柯南。当然了,为了方便那些没有看过柯南的同志们,我这里简单介绍一下,了解的人直接跳过。《名侦探柯南》讲的是一个杰出的高中生侦探工藤新一,在一次查案中,被黑社会强迫吃了毒药。可是醒了之后,却发现他身体变小了。为了掩饰身份,查出黑社会内幕,他寄住在父亲是政坛的女朋友兰家里。每一集里他都会牵扯到一个案件,然后看柯南是如何发挥聪明才智,发现证据,找出真凶,最后提出完美推理的过程。每一集原创 2007-01-11 14:41:00 · 4408 阅读 · 7 评论 -
楼宇的迭代式开发
谈到架构,人们最常想到的就是建筑。这得感谢亚历山大大叔的功劳。另外,设计模式的成功引入到软件工程,也是一个促进。这个成功案例让很多人都去拜读《建筑之永恒之道》。最近在讨论中,突然发现楼房在构建的时候,大部分都是采用迭代式开发的。感觉甚是有意义,特拿出来和大家分享。我们将楼房中的每一个房屋比喻成软件中的功能。那么在开发过程中,如何计划这些功能的开发顺序,以及每一个功能的开发步骤,就是一个非常原创 2007-01-11 11:15:00 · 2795 阅读 · 1 评论 -
Kaspersky和Vista的防盗版方案分析
我相信大家不会不知道kaspersky是什么,这是在过去的一两年里,风靡了全世界的杀毒软件。其最大的特点就是每隔三小时,在线升级病毒库。特别是最近,免费使用Kaspersky的人发现,原来网上流传的注册码都不能使用了。提示的是已经被服务器认定为黑名单。Kaspersky5.0干脆就不工作了,搞得我的机器当时就成为裸机!6.0好一点,虽然不能更新病毒库,但是防火墙还是开着。对于我这个喜欢使用原创 2006-12-29 17:37:00 · 6465 阅读 · 5 评论 -
网格中合并(Merge)功能的多种技术方案
写这篇文章,主要是因为我们的“下午茶时间”(项目内部的一种交流方式)激烈地讨论了此类功能的多种实现,我感觉非常有意思。大家可以参考一下。我先简单地描述一下功能要求,要求设计一种数据结构,支持网格控件(图形化)实现矩形区域的合并效果(Merged)。非矩形区域的合并不在支持范围之内。大家可能都在使用各种各样的网格控件,最出名的可能是FlexGrid。不过大家可以也思考思考,如果是你的话,你会原创 2006-12-26 23:46:00 · 4523 阅读 · 2 评论