如果两个程序都这样做会怎样?

oschina
 oschina
发布于 2013年11月06日
收藏 37

本文作者介绍

Raymond Chen

Raymond Chen是微软Windows Shell开发团队中的知名程序员,从1992年加入微软开始,他参与过OS/2,Windows 95,DirectX已经以后版本的Windows的开发。他的关于Windows的发展以及Win32编程个人博客“The Old New Thing”是微软MSDN上最著名的个人博客之一。著有同名书籍《The Old New Thing》,中文译名为《Windows编程启示录》。Raymond还为Microsoft TechNet撰写专栏文章。

在脑子里“设想如果可以这样”,这种方法能帮助你理解Windows是否会允许让你做这种或那种事情。如果这种设想会明显的导致一种自相矛盾的情 况,或跟人们已经接受的原则体系相冲突,那你可以明确的得出Windows不会支持这种行为的结论。(当然,如果没有明显的矛盾或冲突,也不能证明 Windows就一定会支持这种操作。但用这种方法你可以排除一些明显的不正确的想法。)

问“如果两个程序都这样做会怎样?”也是一种非常有用的甄别一个功能特征或设计想法是否合理的好方法。配合“设想如果可以这样”,它们能成为一个漂亮的组合拳。下面是几个例子:

“我怎么才能创建一个窗口,让它永远不会被其它窗口覆盖,即使那些最上层的窗口也不行?”

假设这样如果是可以的,加上如果有两个程序都这样做。程序A创建了一个“最上层”的窗口,程序B也这样做了。现在用户拖动这两个窗口,让它们重叠,会发生什么?你给自己创造了一个逻辑冲突。这两个窗口必须有一个在上,一个在下,推翻了假想的“超级最上层”设计想法。

“如何突出我的进程,让它成为在系统关机时第一个/最后一个接到通知?我想在系统关机时在所有其它程序退出之前/之后做一些事情。”

假设如果这样可能,假设两个程序都这样做。你现在有了两个程序都希望做第一/最后。但你不可能有两个第一或两个最后。其中有一个必须要放弃。(这个可以推广到其他的人们想要第一或最后的事情上。)

“如何能保证当用户双击.XYZ文件时总是我的关联程序会启动运行?”

假设这是可能的,假设两个程序都想这样。当用户点击.XYZ文件时,哪个程序运行?

这种情况下的一种解决方案是用户来选择文件的关联程序;但一旦用户决定让另外一个程序来执行.XYZ文件,那你不得不接受这样的事实。

对于很多这种“我想成为这最X”类型的问题,程序员通常会想出一些伎俩,比如运行一个定时器周期性的检查自己是否仍是最X,如果不是,就重新把它推到X位。不久,你就会开始停下来思考,“如果两个程序都这样做会怎样?”,于是认识到这是一个糟糕的想法。

就算是我这样解释了,很多人仍然不得要领。我让他们去想想“如果两个程序都这样做会怎样?它们会打架,”而我得到的回复是,“我可以让第二个程序检查第一个程序是否在运行。”他们不明白第二个程序不是他们写的。

当出现两个程序这样“互殴”时,我们无法预料哪一个会赢,但我们可以确定的、100%的预料的谁会输:用户。

我还清楚的记得有一回同事让我看有两个非常流利的商业软件都想成为当用户点击.XYZ文档时被调用的程序。因为这是没法保证的,于是软件里就提供了定时检查的程序试图解决这个问题。

你安装了第一个程序,它把自己设置成.XYZ文件的关联程序,这看起来很正常。然后你安装了第二个程序,它也把自己设置成.XYZ文件的关联程序, 这样第一个程序就跳出来说,“不,.XYZ应该是由我来处理的”,并且把文件关联改了回去。而第二个程序也说,“没门,我才是处理.XYZ文件的程序”, 并且把自己重置回去。

这种小孩斗气式的游戏进行的时候,用户只能无助的坐在那里发愣的看着.XYZ文件的图标在两个程序间换来换去。这两个程序都坚持认为让自己来处理.XYZ文件是在为用户着想。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:如果两个程序都这样做会怎样?
加载中

最新评论(25

赵开锦
赵开锦
浏览器、手机管理软件、音乐播放器、视频播放器都是这么干的吧
szszss
szszss
狠抽国内软件的脸……
lxbzmy
lxbzmy

引用来自“长工”的评论

引用来自“lxbzmy”的评论

很犀利的文章却反映的国产软件的现实。

难到不是所有的软件的“现实”?

国产软件遇到的比国外的软件多一些。 从浏览器,手机app,各种助手,各种插件等等。
冬日暖阳85
冬日暖阳85
这方面比较突出的就是浏览器
川泽人
川泽人
如果电脑里装了手机360和qq的手机管家,那真的热闹,一插入手机就弹出好多窗口,恶心死了
人生能绕几个圈
人生能绕几个圈

引用来自“燃灯”的评论

坚决反对搞个人崇拜

尤其是对萎软的个人崇拜
ViperWhip
ViperWhip
浏览器不是都有设置,是否启动时检查自己是默认浏览器
wobuzhidao_
wobuzhidao_
国内的流氓太多了

每个都想自己成为默认
张亦俊
张亦俊
看看Android很多App就知道这些话是多么有道理
但是劣币驱逐良币,现实就是不耍流氓永远被别人耍……
YHZH
YHZH
文件打开程序就是这样恶心,改了还不行
返回顶部
顶部