Fork me on GitHub
设计时(Design-Time)和运行时(Run-Time)的区别

 设计时(Design-Time)和运行时(Run-Time)的区别

设计时和运行时的概念网上的中文资料很少,如果不是做第三方组件开发的或者跟设计器开发有关的,几乎用不到这些概念。为了迎合之前几篇博客,我想有必要说一下它两的概念和区别,以及用在什么地方。博客好久没更新,比较忙。

    首先,我个人认为“设计时”和“运行时”是针对组件而言的(包括控件),也就是说,一个组件可以处在“运行时”也可以处在“设计时”两个状态,从字面上的意思来看,“设计时”当然是指处在开发阶段,开发人员在设计器中开发组件的时候,而“运行时”指程序处在运行阶段,比如一个button控件,在设计器中的窗体中时,它就处于“设计时”,当程序运行起来之后,这个button还是在窗体中,但它处于“运行时”了。呵,字面上的意思很好理解,那么这两个状态到底有什么用呢?也就是说,微软为什么规定组件有两个状态?想要了解这个问题的答案,我们先得清楚“可视化设计器”(比如VS  IDE)的作用,简单的总结一下:可视化设计器提供一个WYSIWYG(所见即所得)的开发环境,为开发人员提供一个更直观的操作平台。可是,就是这么两句简单的话,却迷惑了多少人。我们来看一张图:

如图所示,任何组件都是可以放在“设计器”中设计的(详见前面几篇博客),也就是说,组件具备“可视化设计”的特性,开发人员通过向设计器中添加组件,就可以快速地设计出一个类型(Form1),然后生成代码文档,保存。整个过程需要注意一下几点:

1)  组件具备“可视化设计”的特性,这里的设计并不代表我们可以改变原有组件的代码,比如向设计器中拖进一个Button控件,默认命名“button1”,接着我们编辑它的属性、绑定事件等等,这些所有的操作都只发生在button1身上,并不会影响原来Button类代码。换句话说,只设计“组件实例“。

2)  开发人员向设计器中添加组件(包括控件),设计器中的组件都是“实例”,也就是说图中的label1、textbox1、button1这些东西都是实实在在地“控件实例”,什么叫“控件实例”?就是说它们都有自己的句柄(Handle)、窗口过程(WndProc)(控件即窗体,窗体即控件,窗体都有句柄和窗口过程,不清楚的请看前面的博客),如果诸位不相信,可以用Spy++查看设计器中的这些控件,可以查找出它们的Handle以及其他信息。关于这一点,我前面博客已经解释过,这里我再提一下。

3)  不管我们怎么操作设计器,我们在设计器中看到的东西确实跟程序运行后的界面大概差不多,但是需要明白的是,设计器中的东西全部都是“虚”的,为什么说它是虚的?因为我们一关闭设计器之后,设计器中的东西全部销毁了,而真正有用的东西就是图中③生成的代码文档!对,你没有看错,我更没有写错,代码文档才是我们最终需要的东西,我们可以将它编译生成exe或者dll文件,不是吗?

4)  接3),我们可以一句话来概括一下“设计器”的作用:为了更快的生成想要的代码。是的,设计器最终的目的就是为开发人员快速生成代码,换句话说,假如没有设计器,开发人员完全可以自己去写代码(比如图中的Form1.cs和Form1.Designer.cs),可是没有哪个sb会这样去做,因为那样实在太麻烦了。

5)  我们将生成的代码文档编译生成exe文件,运行之,我们会看见什么?毫无疑问,我们会看见与设计器中差不多类似的界面,有一个label、一个textbox、一个button。这个是为什么?因为生成的代码都是由设计器生成的,我们拖进去一个Label,设计器就会生成类似如下的代码:

Label  label1 = new Label();

label1.Location = new Point(10,10);

label1.Text = “label1”;

this.Controls.Add(label1);

//大概类似这样,可能不相同

同理,textbox1和button1也一样。如果我们在属性列表中修改label1的Text属性为“test”,那么,立即有这样的代码生成:

label1.Text = “test”;

注意,以上自动生成的代码都在InitializeComponent方法中,我们将生成的代码编译运行,当然会按照原来设计时的样子一一还原。

     如果看懂以上5点的童鞋,那么基本上就能理解本篇博客所要说明的问题了。我们再来回忆一下文章开始提出来的问题:组件为啥要有两个状态,设计时(Design-Time)和运行时(Run-Time)?答案在2)和5)中,已经说过,设计器中的任何组件都是实例,换句话说,你往设计器中拖放组件的时候,会调用它的构造方法,如果该组件恰好是一个控件,那么肯定会激发它的Load事件,当它在设计器中重绘时,肯定会激发它的Paint事件等等等。也就是说,如果我自定义一个控件:

 View Code

本来设计这个自定义控件的开发人员想让控件加载时,弹出一个消息框,现在问题来了,使用这个自定义控件的coder,只要将该控件拖进设计器时,就会弹出一个MessageBox,毫无疑问,这不是我们希望的。如下图:

这只是一个简单例子,如果我们在开发第三方组建时,需要在某些场合进行IO操作、访问数据库或者操作注册表等等,那么就有必要考虑这些会不会在设计器中发生,比如修改一下上面的代码:

 View Code

问题就显而易见了,只要你将该控件拖进设计器,那么就会发生“操作注册表”或者“连接数据库”这样的行为。

     想要解决以上问题,微软就提出来了“设计时”和“运行时”的概念,其实就我个人理解,同一个组件,它出现在设计器中,它就是处于“设计时”,否则它就是处于“运行时”,每个组件都有一个DesinMode属性,如果该属性为true,那么它就是处于“设计时”,否则,它就是处于“运行时”。(注:该方法判断不太准确,只适合大部分场合,使用所有场合的判断方法现在不必提及

那么,原有代码就可以修改为:

 View Code

    问题完美解决。设计时和运行时的概念,就像同一个人,出生在官宦之家,那么他就是“官二代”,如果出生在普通家庭,那么他很有可能是所谓的“屌丝”。官二代和屌丝有很大的区别,就像设计器中的Button和运行期间的Button,差别很大。

    另外,至于为什么设计器中的组件与运行时的组件能有不同的表现,比如设计器中的组件可以通过属性列表编辑它的属性,可以改变它的位置、大小等等等等,甚至为什么会自动生成代码,这些东西都属于设计器所必须具备的功能,本篇文章不讨论。

代码为word中所写,如有错误,望见谅!希望对诸位有帮助。

 
 
 
标签: c#

小菜的系统框架界面设计-从认知心理学谈优秀的系统界面设计?

什么样的系统界面才算得上是优秀的设计?应该遵守哪些原则?

系统界面设计原则总的来说可以概括成界面在用户的掌控之中、保持界面的一致性和减少用户记忆的负担这三大点,下面就给大家具体介绍一下界面设计原则:

(一)界面设计原则

(1)用户原则。人机界面设计首先要确立用户类型。划分类型可以从不同的角度,视实际情况而定。确定类型后要针对其特点预测他们对不同界面的反应。这就要从多方面设计分析。

(2)信息最小量原则。人机界面设计要尽量减少用户记忆负担,采用有助于记忆的设计方案。

(3)帮助和提示原则。要对用户的操作命令作出反应,帮助用户处理问题。系统要设计有恢复出错现场的能力,在系统内部处理工作要有提示,尽量把主动权让给用户。

(4)媒体最佳组合原则。多媒体界面的成功并不在于仅向用户提供丰富的媒体,而应在相关理论指导下,注意处理好各种媒体间的关系,恰当选用。

(二)界面分析与规范

在人机界面设计中,首先应进行界面设计分析,进行用户特性分析,用户任务分析,记录用户有关系统的概念、术语,这项工作可与多媒体应用系统分析结合进行,囊括于用户分析报告里。

(三)人机界面的类型

任务设计之后,要决定界面类型。目前有多种人机界面设计类型,各有不同的品质和性能,下图进行了详细的描述。

创造性地使用多媒体环境,将会使应用程序功能大大增强。要做到这一点,需从如下两方面考虑:

(1)媒体的功能:

没有任何一种媒体在所有场合都是最优的,每种媒体都有其各自擅长的特定范围,各种媒体功能参考如下:

①人们在问题求解过程中的不同阶段对信息媒体有不同需要。一般在最初的探索阶段采用能提供具体信息的媒体如语音、图像等,而在最后的分析阶段多采用描述抽象概念的文本媒体。而一些直观的信息(图形、图像等)介于两者之间,适于综合阶段。

②媒体种类对空间信息的传递并没有明显的影响,各种媒体各有所长。

③媒体结合是多媒体设计中需要研究的新课题。媒体之间可以互相支持,也会互相干扰。多种媒体应密切相关,扣紧一个表现主题,而不应把不相关的媒体内容拼凑在一起。

④目前,媒体结合在技术上主要通过在一个窗口中提供多种媒体的信息片段(空间结合)和对声音、语音、录相等随时间变化的动态媒体加以同步实现(时间序列组合).

⑤媒体资源并非愈多愈好,如何在语义层上将各种媒体很好的,结合以更有效地传递信息,是要很好地探索的研究课题,也是应用系统人机界面设计的关键问题。

(2)媒体选择的结合与互补:

脚本设计可根据内容需要分配表达的媒体,这里要特别注意媒体间的结合与区别。提出几条原则如下:

①人们在问题求解过程中的不同阶段对信息媒体有不同需要。一般在最初的探索阶段采用能提供具体信息的媒体如语音、图像等,而在最后的分析阶段多采用描述抽象概念的文本媒体。而一些直观的信息(图形、图像等)介于两者之间,适于综合阶段。

②媒体种类对空间信息的传递并没有明显的影响,各种媒体各有所长。

③媒体结合是多媒体设计中需要研究的新课题。媒体之间可以互相支持,也会互相干扰。多种媒体应密切相关,扣紧一个表现主题,而不应把不相关的媒体内容拼凑在一起。

④目前,媒体结合在技术上主要通过在一个窗口中提供多种媒体的信息片段(空间结合)和对声音、语音、录相等随时间变化的动态媒体加以同步实现(时间序列组合).

⑤媒体资源并非愈多愈好,如何在语义层上将各种媒体很好的,结合以更有效地传递信息,是要很好地探索的研究课题,也是应用系统人机界面设计的关键问题。

(四)界面设计原则中的用户心理学

认知心理学,从广义上来说,就是关于认识的心理学。人类认识客观事物,主要就是通过感觉、知觉、注意、记忆、思维想象等来进行,因此,凡是研究人的认识心理过程的,都属于认识心理学。实际上,我们这里所指的认知心理学是指纯粹采用信息加工观点来研究认知心理学过程的心理学,也就是运用信息论以及计算机的类比、模拟、验证等方法来研究的的知识是如何获得、如何存贮、如何交换、如何取使用的。所以,我们这里所指的现代认知心理学实质是信息加工心理学。一般地,人们将信息加工心理学又称为狭义的认知心理学。

1.认知过程看和听的过程构成知觉,图像和声音作为刺激的特征被接收并以抽象的方式被编码,把输入和记忆中的信息进行对比得出对刺激的解释,这一过程就是认知。人体信息处理器包括感官,短期记忆、长期记忆及与其相联系的动作处理器和认知处理器。每种知觉均有一个对应的短期存储器和处理器。其中认知处理器执行的工作就是我们通常所说的思维,思维的结果或被存储起来,或送至动作处理器控制行动。

2.认知心理学

现代认知心理学的核心: 现代认知心理学的理论实质,就是以计算机信息加工的观点来研究人的心理学活动,把人脑看作是一种如同计算机的信息加工系统。

现代认知心理学两个关键的重要概念: 现代认知心理学的学说内容集中体现在两个关键的重要概念上。现代认知心理学的一个重要的中心概念,就是“信息”。在某种程度上说,抽掉了“信息”的概念,认知心理学的理论也就会散架解体,难以存在。 现代认知心理学的另一个重要的中心概念,就是“信息加工系统”。信息加工系统的理论,是现代认知心理学理论的主体。

现代认知心理学的研究方法:现代认知心理学的研究方法有实验法、观察法(包括自我观察法)以及计算机模拟法等。

关于一些认知心理的图示:

   wuya 

(图一)

 rezhi1

(图二)

捕获

(图三)

pic_217039

(图四)

201011151526478476

人的认知意识,决定了人的行为,如果我们的系统框架设计也遵循人的认知,让人很容易感知意图,那么这样的系统界面设计应该是成功的。

 

3.人机交互设计遵循的认知原则根据用户心理学和认知科学,提出了如下基本原则指导人机界面交互设计。

一致性原则。即从任务、信息的表达、界面控制*作等方面与用户理解熟悉的模式尽量保持一致。

兼容性。在用户期望和界面设计的现实之间要兼容,要基于用户以前的经验。

适应性。用户应处于控制地位,因此界面应在多方面适应用户。

指导性。界面设计应通过任务提示和反馈信息来指导用户,做到“以用户为中心”。

结构性。界面设计应是结构化的,以减少复杂度。

⑥经济性。界面设计要用最少的支持用户所必须步骤来实现。

在界面设计原则指导下,提出以下几点针对界面设计与屏幕设计的参考:

由具体到抽象。即首先通过多媒体界面给用户提供具体的对象。然后从具体对象、内容中让学习者归纳出抽象的概念或原理,或用模拟系统来引导出抽象的原理。

由可视化的内容显示不可见的内容。尽可能利用数字、图解、动画、色彩等清晰爽目的对象显示原理、公式或抽象的概念。

由模拟引导创新。突出人机交互,尽量启发用户的积极思维和参与,并激起用户的学习和创造欲望。

合理运用再认与再忆,减少用户短期记忆的负担。所谓再认就是从系统给定的几个可能答案中要用户选择一个正确的或最好的。再忆即要求用户输入正确的答案或关键字。

考虑用户的个别差异,使用用户语言。

以上五点具体体现了“由易而难,逐步强化。”这一源于认知心理学的原则。

上文介绍的界面设计原则应该让大家心中对界面设计原则有了一定的认识,当然,因为界面设计是复杂的需要多学科参与的,心理学、语言学、设计学等学科都在里面占有重要作用。而用户界面是与程序交流的唯一方式,为了给用户提供最便捷的服务,界面设计原则是一定要遵守的。

      个人认为好的设计案例有:

(1)微软的Outlook

outlook

(2)微软的Excel和Word

exel Word

 

(3)微软的Microsoft Visual Studio

Microsoft Visual Studio

(4)腾讯QQ

qq

 

  • 客户几乎每天都在使用类似Outlook,Excel,Word之类的办公软件,从认识感知上考虑,如果设计跟此软件框架相似布局,是不是更容易让客户接受?

Microsoft Visual Studio的左航条的灵活性,横向菜单的可移动性,更是满足了不同人群根据不同习惯进行调整。

  • 腾讯QQ为什么当初很轻易战胜UC?应该跟它不断提升的用户体验有关系,其中我最喜欢的换肤调色板,解决了我色弱的问题,肯定也对一些色肓人类也带来便利喔。微笑

     我的系统框架设计就从这几款软件进行模仿,取之设计之优势,去之糟粕。

     废话好像多了,后续的博文应该是开始系列之旅了,先开个头明确一下,是否我的做法是对还是错?

     

    《上文部分理论知识参考网络,如有侵权请见谅》

 

 
 
posted on 2013-06-12 10:17  HackerVirus  阅读(1776)  评论(0编辑  收藏  举报