不管是关于用户仍是关于开辟者而言,图形用户界面早已成为软件范畴中人们习认为常的部分了。从设计角度看,GUI代表着系统设计中一组特别的问题 —— 这些问题具有大量分歧但却又有点类似的处理计划。
我的兴味是为使用顺序开辟者找出关于富客户端开辟有效的通用形式。我曾经在很多项目评审中看到过量种分歧的设计计划,并且还也见到过很多以愈加易于保存下来的方法来描绘的设计计划。在这些设计计划中存在着很有效的形式,可是,将形式描绘出来凡是都不太轻易。以模子-视图-把持器为例来讲,人们经常把它称为一种形式,可是我发明把它看做一种形式并非特殊有效,由于在它外面包括着很多分歧的理念。在分歧的地方读到MVC时会从中失掉分歧的理念,并且人们还会把这些分歧的理念都描绘为‘MVC’。假如这还缺乏以形成非常多困扰的话,经过“传话游戏”终将形成人们对MVC曲解的终局。
在本文中,我想对很多很值得存眷的架构实行讨论,并为它们最值得存眷的那些特征给出我的解读。我盼望如许将可认为人们可以了解我所描绘的形式供给一个适当的语境。
其它翻译版本 (1) 加载中在必定水平上你可以将本文看做一种用来追溯多年来各类架构下UI设计理念的思惟史。但是,我在此必需提示大师留意,架构了解起来绝非易事,特殊是非常多架构还在不时的变更和灭亡中。要追溯出理念的传达头绪更是难上加难,这是由于统一个架构分歧的人有各自分歧的解读。特别是我并未对我所描绘的架构实行完整完全的研讨。我所做的只是对它们的设计实行了普通性的描绘。假如这些描绘有所疏漏的话,我绝对是无意的。所以,请不要将我的描绘看做是这些架构的威望性阐明。并且,我还舍弃或精简了我以为其实不怎样离题的内容。请记着,我所关怀的首要是底层的形式,而不是这些设计的开展史。
(这里有个破例,我有一个可以运转起来的Smalltalk-80情况让我可以了解此中的MVC。还得说一次,我其实不以为我对MVC的查询拜访曾经做到了十分完全的水平,但我的查询拜访曾经提醒出很多对MVC比拟常用的描绘中并没有给出的内容 —— 这让我进一步对我在本文中给出的对其它架构的描绘坚持警觉。假如你熟习这些架构中的某一个架构而且看到有点主要的工具我给弄错了或许脱漏了,恳请告诉。我以为,这个范畴还可以作为一个很好的学术研讨工具,加以更加详实的查询拜访研讨。)
其它翻译版本 (1) 加载中我将从对大师来讲即容易又熟习的架构开端实行讨论。这个架构还没有一个通用的称号,为了便于在本文中实行会商我暂且将它们称为“表单和控件”。这个架构之所认为大师熟知,是由于早它在上世纪90年月的Visual Basic、Delphi和Powerbuilder等等相似的Tools中备受推重,直到如今仍为大师普遍运用,固然也常为象我如许的设计狂所诟病。
为了对包含这个架构在内的一切架构实行讨论,我将运用一个配合的例子。在我所寓居的新英格兰,有一个用于监测空气中冰激凌微粒数目的当局项目。假如冰激凌微粒的浓度太低,就标明我们吃的冰激凌不敷多,这对我们的经济和公共次序而言是一种严重的风险要素。(我所爱好运用的例子同你凡是在此类技巧书中看到的例子比拟来讲会愈加真实。译者注:这生怕是作者在恶作剧)
为了监测我们的冰激凌的安康形态,当局在全部新英格兰州架设了响应的监测站。采取了比拟庞杂的空气模子,当局部门为每一个监测站设置了目的值。任务职员时不时地到分歧的监测站实行安康形态评价,记载下各监测站实践读到的冰激凌微粒浓度。任务职员运用下图所示的UI选择监测站,并输出日期和读到的实践值。然后系统盘算并显示出实践值和目的值之间的差值。并且,假如实践值同目的值比拟,低到超越了10%的水平,差值将以白色高亮显示,假如实践值同目的值比拟,高到超越了5%,差值将以绿色高亮显示。
图1:本例所运用的UI
但我们看到这个界面时,我们会看到全部界面中有一个主要的分界限。该表单是我们的使用所专用的,但它却用到了非常多通用的控件。绝大大多数GUI情况带有大量的通用控件,我们可以之间将它们用在我们的顺序中。我们还可以创立本人的控件,并且创立本人的控件常常仍是个好主见,可是通用的可重用控件分歧于专用的表单。即便专门为到达某个目标而编写的控件也能够重用于多个分歧的表单。
该表单具有两个首要的职责:
大部分GUI开辟情况城市有一个图形化的编辑器,开辟者可以在该编辑器中将控件拖拽到表单中,以此来完成对表单中大部分的界面结构的界说。采取这类方法,很轻易就可以够在表单中设置出一个讨人爱好的结构(固然这其实不老是设置结构的最好方法,我们会鄙人文中对此再次实行会商。)
控件是用来显示数据的 —— 在这个例子中我们要显示的数据都是同任务职员读到的微粒值相干的数据。这些数据相当一部分老是来自其它的某个地方,在这个例子中让我们假定它们来自一个SQL数据库吧,这同大大多数客户端ServerTools所假定的相一致。在大大多数状况下,城市触及到3份数据:
坚持screen state和session state同步是很主要的。对此有个很有效的手腕Data Binding(数据绑定)。根本的思绪是:不管是控件表示或是控件底层的数据集,任一方发作了改动都立刻把改动传达给另外一方。所以假如我改动了选择的station,那末文本框控件(station id)也会随着改动(因为底层的数据集发作了改动)。
实践上数据绑定是有点顺手的,由于你需求防止轮回,比方控件形态改动了,会招致数据集的改动,数据集的改动又会更新控件招致控件形态改动.....。要防止这类状况,我们要遵照以下的运用流程:界面初始化时从session state加载数据,以后任何界面上的改动(screen state)都传达给session state. 而当底层的数据集改动后立刻更新桌面控件的形态凡是是不常用的,所以数据绑定可能不是完整双向的-仅限于初始的上传(指数据从session state 传到 screen state),以后数据的改动会从控件传达到session state.
数据绑定将一个客户端Server使用顺序的大部分功用处置得很美丽。假如我改动了被更新列的实践值,乃至只是改动了选择的目的,记载集中以后所选行也会随着变,它也会招致其它的控件的刷新。
这些行动中的大大多数都是内置于框架的结构器中的,它们专注于广泛的需求,而且让这些需求很轻易被知足。这是经过修正控件的特定值做到了,这些值普通被叫做控件的属性。经过一个容易的属性编辑设置其列名,从而使控件被绑定到一个记载集的特定列。
运用适宜类型的参数化来实行数据绑定,可让你走得更远。但是它其实不老是汇合你自得——老是有一些逻辑不克不及同参数化的选项相适配。如许的场景,像盘算方差(variance)就是一个不克不及适配内置行动的例子——由于使用顺序使它详细的依靠于方式了。
其它翻译版本 (1) 加载中为了完成数据绑定,在实践字段的值发作变更时,就需求经过某种方式来告诉表单,这就请求通用的文本框要挪用表单上的某个特定行动。这个进程远比采取类库然后经过把持反转来挪用这个特定行动的状况要庞杂很多。
完成这类挪用的办法有非常多种 —— 客户端-ServerTools箱中最多见的就是采取事情的观点。每一个控件都有一个它可以激起的事情列表。任何内部工具都可以通知控件它对某事情感兴味 —— 然后在发作这类事情时控件就会挪用该内部工具。实质上讲,这只是察看者(Observer)形式的另外一种说法罢了,此时表单就是控件的察看者。凡是框架会供给某种机制闪开发者可以用它来编写一个子顺序,然后在响应的事情发作时该子顺序就会失掉挪用。究竟在事情和子顺序之间的联系关系关系是怎样树立的,关于我们这里的会商来讲其实不主要,并且其树立的方法也会随平台的分歧而分歧 —— 这里的要害在于确实存在某种可以让这一切发作的机制。
一旦表单上的子顺序取得把持权,它就能够随心所欲了。该子顺序可以在履行特定的行动后,再依照需求对控件的显示内容实行修正,随后再依靠数据绑定机制将控件中的数值改动通报回会话形态。
由于并非老是有数据绑定可用,所以这么做也很有需要。Windows控件的市场十分大,但并非一切的控件都供给了数据绑定功用。假如没有数据绑定功用,完成同步Task的义务就非表单莫属了。这可以经过刚开端时从记载集中将数据中拿到数据并将数据设定到界面组件中,然后在保管按钮按下后将修正后的数据保管回数据库中来完成。
下面假定在数据绑定功用状况下,让我们具体看看对实践数值的编辑进程。表单工具保管了一个间接指向通用控件的使用,并且为屏幕上的每一个控件都保管了一个如许的援用,可是,这里我所关怀的只是实践字段、 变更字段和目的字段。
图2:表单和控件的类图
文本域为文本的改动声了然一个事情,当表单在初始化时期组装屏幕时,它本身支付了阿谁事情,将一个办法绑定到其本身的——这里是一个actual_textChanged(实践值文本变卦)。
图3:运用表单和控件改动款式(genre)的序列图
当用户改动实践值得时分,文本域控件就会晋升其事情,而且经过框架的魔术使得actual_textChanged的绑定得以运转。办法从实践的目的文本域中失掉了文本值,做一些截取(subtraction),然后把这个值放到变更域(variance field)中。它也管帐算出这个值应当用甚么色彩来显示,而去适应适当的文本色彩。
我们能用一些简评来总结该架构:
开辟者编写运用了通用控件的使用顺序定制表单。
表单描绘了其控件的结构。
在UI开辟范畴被最普遍引述的形式极可能就是MVC(Model View Controller)了——它也是最为人所不确实援用的。我曾经盘算不出来我有几多次看到些一些工具被描绘成为MVC,而终极被证实一点都不像MVC了。坦白点讲,发作这类状况很多是部分因为传统的MVC不怎样真正了解如今的富客户端。而今朝先让我们来瞧一瞧它的来源。
我们对待MVC时,有一点很主要,那就是这是在任何范围上实行严厉的UI任务的初次测验考试之一。图形用户界面在上个世纪70年月还其实不怎样普及。我后面方才描绘过的表单和控件模子呈现在MVC以后——我起首描绘它们是由于它们愈加容易——可是请留意,我成心经过实行一些针对Smalltalk80实践细节上玩味来实行这一描绘 —— 一开端它只是一个单色(monochrome)系统。
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务