很多时候(似乎昨天还有人在QQ上问Delphi怎么定义全局变量...),很多人都喜欢用全局变量来保存一些数据, 这样可以随时随地的调用他们。这样看似方便(实际上也很方便),但这个时候你却为自己埋下了很深的隐患。
全局,顾名思义就是在任何地方都可以访问到的,也是任何机制都可以修改或显示的(当然你可以对它加一些限制,但这些限制终归也是全局的),那么这个时候,它就成了一个不可控量。所谓不可控量简单的说就是一个量的的状态未知。
OOP设计中是坚决杜绝不可控量的存在的,因为不可控量的存在会破坏数据的封装性以及可维护性。
我们都有过这种体验:一个全局字段被设计出来,任何时候它都会被更改,但随着时间的推移,我们不得不使用越来越多的记忆细胞来记忆到底那里用到了它,而在设计是还要考虑对它的修改会影响到哪里的调用。往往这个时候是让人最抓狂的时候。最常见的情况就是我们在ASP/ASP.NET中使用的Session变量,很多人都会直接操作Session变量,并通过特征字符串来访问它,这就给这个程序带来了很大的不可控性。
另一种情形:一个操作需要一个生命周期很长的变量来进行,于是你在上面提到的建议下把它设计成了类,嗯,这是很好的开始,至少对于这个变量来说可能是可控的了,但是考虑到变量的生命周期,你把它设计成了静态类,呜,似乎问题被圆满解决了,全局和生命周期都兼顾了。可是接下来问题又来了,随着设计的往下进行,你发现原先设计的静态类需要修改,还有若干类似功能的类也要写出来,那么这个时候,你想到了继承...于是...你得到了编译器的友情提示:静态类不能被继承...这个时候,键盘会变成什么形状我们不得而知
上述两种情况在很多初学者甚至有丰富经验的人中出现频率很高,这在OOP的思想里是无法被接受的。
针对上述两种情况,一个被暂时称为“悬挂式全局”的设计方式可以比较好的解决。
所谓的悬挂式,是说把一个全局的逻辑或者数据“委托”给一个可控的量来管理。比如对于这样一个设计:
用户登录验证是我们最常用的功能模块,这个模块的设计一般是结合Session变量来设计的。首先我们会在登录的时候将数据存入Session,在使用的时候又读取Session中的数据,但是考虑到上述的问题,我们并不直接使用它。
在这里,我们设计两个类:
TRoleData,TRoleSession
其中TRoleData封装了与用户有关的所有的数据及其操作,TRoleSession则只是实现了对TRoleData的封装以及对一个特有Session变量的维护,如下代码:
上述的ROLE_KEY可以使用MD5或者GUID来生成此对象的唯一标识符,以避免其他的地方可能会通过标识字段修改Session的值,TRoleSessionl将危险的Session变量隐藏起来,只向外界提供必需的数据接口,这样TRoleData就只能通过TRoleSession来访问和控制了,最大程度的避免了全局变量带来的程序不可控性,另外TRoleData可以自由扩展,这个数据对象就像悬挂在了Session上。
一般来说,在MVC式设计方式当中,Model和View的没有实体逻辑及业务操作,它们不可以被有效的控制,所以是无法作为全局变量出现的,只有Control才能够凭借自身的可控性来管理上述两种数据的状态。那么由OOP原则来看,将Control也就是控制逻辑元素来作为全局是最理想的,“悬挂式全局”设计方式正是利用了这一点。
您还没有登录,请您登录后再发表评论
然而,随着时间的推移,Struts 1逐渐暴露出一些设计上的局限性,如性能瓶颈、安全问题以及对于现代Web开发趋势的适应性不足。这篇名为“让Struts 1焕发青春——小议对Struts的改造”的文章,可能探讨了如何通过一...
这种方式不仅有助于提升员工的工作效率,还能增强其对企业文化的认同感,从而提高整体工作满意度。 值得注意的是,培训不应该被看作是一项可有可无的活动。它是一种投资,虽然在短期内可能难以看到直接的回报,但从...
本文将对湿地公园景观设计的几个重要方面进行小议,以期为未来的湿地公园建设提供一些参考和借鉴。 首先,湿地公园景观设计应着重展现其独特的自然景观特征。湿地公园通常以水面为主体,陆地为辅助,形成鲜明的水陆...
小议网络工程的设计与建设.pdf
【小议手工艺风格建筑设计】 手工艺风格在建筑设计中是一种独特的表达方式,它注重传统与现代的融合,体现出尊贵典雅且时尚的气息。这种风格不仅仅体现在建筑的细部装饰上,更深入到整体的规划设计之中,营造出一种...
工业设计中的情感化设计是一种将人类情感和心理需求融入产品设计过程的方法,旨在创造与用户建立深厚情感联系的物品。这种设计理念强调以人为本,注重产品在功能之外所传递的情感价值,以此提升用户体验和满意度。 ...
小议机械设计中的CAD技术.pdf
小议排水设计在高速公路的应用.doc
【网页视觉设计概述】 网页视觉设计是一门融合了艺术、技术与用户体验的学科,随着互联网的普及和发展,它已经成为网页设计的关键环节。网页作为信息传播的主要载体,其视觉设计不仅影响用户的第一印象,还直接决定...
小议算机平面美术设计教学法.doc
小议我国的价格听证制度-论文.zip
基于信息化手段的设计说明教学小议.docx
小议培养学生团结协作精神方式.doc
这种应用方式主要是取代了传统手工绘图,通过计算机技术来处理图形和数据信息,设计者在进行机械产品设计时可以更加专注于产品设计本身,提高了设计质量和效率。 其次,CAD技术支持参数化设计。在机械零部件设计中...
小议机械设计自动化设备的安全控制管理.pdf
小议计算机应用基础教学方式的革新.docx
在当今教育领域,随着课程改革的不断深入,教学设计的重要性日益凸显,尤其在小学音乐教学中,合理而富有创造性的教学设计不仅能提高教学质量,还能有效激发学生的音乐学习兴趣,培养他们的音乐素养。本文将深入探讨...
相关推荐
然而,随着时间的推移,Struts 1逐渐暴露出一些设计上的局限性,如性能瓶颈、安全问题以及对于现代Web开发趋势的适应性不足。这篇名为“让Struts 1焕发青春——小议对Struts的改造”的文章,可能探讨了如何通过一...
这种方式不仅有助于提升员工的工作效率,还能增强其对企业文化的认同感,从而提高整体工作满意度。 值得注意的是,培训不应该被看作是一项可有可无的活动。它是一种投资,虽然在短期内可能难以看到直接的回报,但从...
本文将对湿地公园景观设计的几个重要方面进行小议,以期为未来的湿地公园建设提供一些参考和借鉴。 首先,湿地公园景观设计应着重展现其独特的自然景观特征。湿地公园通常以水面为主体,陆地为辅助,形成鲜明的水陆...
小议网络工程的设计与建设.pdf
【小议手工艺风格建筑设计】 手工艺风格在建筑设计中是一种独特的表达方式,它注重传统与现代的融合,体现出尊贵典雅且时尚的气息。这种风格不仅仅体现在建筑的细部装饰上,更深入到整体的规划设计之中,营造出一种...
工业设计中的情感化设计是一种将人类情感和心理需求融入产品设计过程的方法,旨在创造与用户建立深厚情感联系的物品。这种设计理念强调以人为本,注重产品在功能之外所传递的情感价值,以此提升用户体验和满意度。 ...
小议机械设计中的CAD技术.pdf
小议排水设计在高速公路的应用.doc
【网页视觉设计概述】 网页视觉设计是一门融合了艺术、技术与用户体验的学科,随着互联网的普及和发展,它已经成为网页设计的关键环节。网页作为信息传播的主要载体,其视觉设计不仅影响用户的第一印象,还直接决定...
小议算机平面美术设计教学法.doc
小议我国的价格听证制度-论文.zip
基于信息化手段的设计说明教学小议.docx
小议培养学生团结协作精神方式.doc
这种应用方式主要是取代了传统手工绘图,通过计算机技术来处理图形和数据信息,设计者在进行机械产品设计时可以更加专注于产品设计本身,提高了设计质量和效率。 其次,CAD技术支持参数化设计。在机械零部件设计中...
小议机械设计自动化设备的安全控制管理.pdf
小议计算机应用基础教学方式的革新.docx
在当今教育领域,随着课程改革的不断深入,教学设计的重要性日益凸显,尤其在小学音乐教学中,合理而富有创造性的教学设计不仅能提高教学质量,还能有效激发学生的音乐学习兴趣,培养他们的音乐素养。本文将深入探讨...