08 2011 档案
摘要:什么是依赖,什么是抽象1.关于依赖和耦合:从小国寡民到和谐社会在老子的“小国寡民”论中,提出了一种理想的社会状态:邻国相望,鸡犬之声相闻,民至老死,不相往来。这是他老人家的一种社会理想,老死不相往来的人群呈现了一片和谐景象。因为不发生瓜葛,也就无所谓关联,进而无法导致冲突。这是先祖哲学中的至纯哲理,但理想的大同总是和现实的生态有着或多或少的差距,人类社会无法避免联系的发生,所以小国寡民的理想成为一种美丽的梦想,不可实现。同样的道理,映射到软件“社会”中,也就是软件系统结构中,也预示着不同的层次、模块、类型之间也必然存在着或多或少的联系,这种联系不可避免但可管理。正如人类社会虽然无法实现小国寡民
阅读全文
摘要:关于抽象和具体什么是抽象呢?首先不必澄清什么是抽象,而从什么算抽象说起,稳定的、高层的就代表了抽象。就像一个公司,最好保证了高层的稳定,才能保证全局的发展。在进行系统设计时,稳定的抽象接口和高层逻辑,也代表了整个系统的稳定与柔性。兵熊熊一窝,将良良一窝,软件的构建也正如打仗,良好的设计都是自上而下的。而对具体的编程实践而言,接口和抽象类则代表了语言层次的抽象。追溯概念的分析,一一过招,首先来看依赖于具体,如图3-3所示。因此,为了分离这种紧耦合,最好的办法就是隔离,引入中间层来分离变化,同时确保中间层本身的稳定性,因此抽象的中间层是最佳的选择(如图3-4所示)。以例而理,从最常见的服务端逻辑举
阅读全文
摘要:模式的起点¡工厂方法(FactoryMethod Pattern)模式起点:将程序中创建对象的操作单独进行处理,大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式。典型应用:工厂方法模式是最简单也最容易理解的模式之一。其关注的核心是对于对象创建这件事儿的分离。¡单例(SingletonPattern)模式起点:一个类只有一个实例,且提供一个访问全局点的方式,更加灵活地保证了实例的创建和访问约束,并且唯一约束的实施由类本身实现。典型应用:一个类只有一个实例,经常被应用于Façade模式,称为单例外观。¡命令(CommandP
阅读全文
摘要:好代码、坏代码之四9.扩展无处不在扩展性是衡量一个软件产品的重要尺度之一。通过合适的设计为软件系统赋予一定程度的扩展,是架构师着手设计的重要考虑因素,如图3-16所示。扩展是个大课题,涉及软件系统的方方面面,依赖于粒度不同的架构格局。举例来说,数据库设计可以考虑在横向或纵向的扩展、在多层架构中实现可适配的数据层、为业务层实现注入逻辑设计、在UI层提供可配置的界面选择以及为物理架构提供横向扩展的部署设计。实现基于服务的系统,就意味着在服务层支持扩展良好的高层架构;而一个面向接口的设计,将是为扩展提供可能的选择之一;采用ASP.NET MVC构建的Web系统,将在很多方面被赋予扩展的标签,基于管线
阅读全文
摘要:好代码、坏代码之三7.线程安全很重要线程安全是重要的,在数据共享或同步的场合应将线程安全作为必须考虑的因素,不安全的代码将在多线程运行时造成严重的问题。例如,单例模式就是这样一个需要特别注意的例子:publicsealedclassSingleton{Singleton(){}publicstaticSingletonInstance{get{if(instance==null){instance=newSingleton();}returninstance;}}privatestaticSingletoninstance=null;}因此,你可以考虑通过“双锁”机制来保证线程的安全,不过在.
阅读全文
摘要:好代码、坏代码之二4.多注释,少废话代码,一定是给人看的,而代码本身的逻辑又决定于方法、类型和依赖的关系之中,所以,必要的注释,是必需且必要的。通过注释的进一步解释,来辅助性地告知代码的逻辑、算法或者流程,不仅是好习惯,更是好代码。另一方面,注释不是“无病呻吟”,没有必要表述那些显而易见的逻辑或者说明,同时注意区分单行注释和多行注释的应用。在.NET平台下,XML格式的注释还肩负了另一项重要的使命,那就是根据注释生成代码文档。例如:///<summary>///根据用户信息,构建标签信息///</summary>///<paramname="member
阅读全文
摘要:好代码、坏代码之一1.命名很重要,让代码告诉你它自己命名到底有多重要呢?重要到这几乎是很多软件项目成功或者失败的“罪魁祸首”,究其原因,代码不光支撑了0和1在计算机系统中运行的业务逻辑,同时也是开发者进行交流与研究的标准语言。没有意义或者有歧义的命名,就像两个等待交流的人,面对了一堆火星文无从下口,让交流变成灾难,也就导致很多问题。同时,好的命名是自说明的,让代码告诉开发者“我是谁,我做什么,我怎么做”。当然,除了静态式的必要的注释说明之外,动态式的代码也可以包含传递信息的作用,让代码告诉你它自己,因为代码是“活的代码”。例如,以某个缓存容器为例,泛型参数明确了容器的Key和Value的关系,
阅读全文
摘要:设计由何而来设计,从何而来?是需求。是重构。设计原则是系统设计的灵魂,而设计模式是系统开发的模板,灵活自如的应用才是设计以不变应万变的准则。例如,实现一个用户注册的方法,首先会想到://初次设计publicvoidRegister(stringname,Int32 age){}在一定的需求条件下,这个方法已经能够经受系统的考验,安全而平稳地向数据库中不断插入新的用户信息。然而,当需求发生变化时,你可能不得不对此做出调整,而我们就将这种调整称为重构。但是重构远不是扩充,而是设计。例如,现在的注册项发生了变化,还需要同时注册性别、电话,没有设计的调整,就被实现为://需求变更publicvoidR
阅读全文
摘要:解构控制反转(IoC)和依赖注入(DI)1.控制反转控制反转(Inversion ofControl,IoC),简言之就是代码的控制器交由系统控制,而不是在代码内部,通过IoC,消除组件或者模块间的直接依赖,使得软件系统的开发更具柔性和扩展性。控制反转的典型应用体现在框架系统的设计上,是框架系统的基本特征,不管是.NET Framework抑或是Java Framework都是建立在控制反转的思想基础之上。控制反转很多时候被看做是依赖倒置原则的一个同义词,其概念产生的背景大概来源于框架系统的设计,例如.NET Framework就是一个庞大的框架(Framework)系统。在.NET Fram
阅读全文
摘要:对象创建的依赖关于依赖的哲学,最典型的违反莫过于对象创建的依赖。自面向对象的大旗树立以来,对于对象创建话题的讨论就从未停止。不管是工厂模式还是依赖注入,其核心的思想就只有一个:如何更好地解耦对象创建的依赖关系。所以,在这一部分,我们就以对象创建为主线,来认识对于依赖关系的设计轨迹,分别论述一般的对象创建、工厂方式创建和依赖注入创建三种方式的实现、特点和区别。1.典型的违反一般而言,以new关键字进行对象创建,在.NET世界里是天经地义的事情。在本书7.1节“把new说透”中,就比较透彻地分析了new在对象创建时的作用和底层机制。对.NET程序员而言,以new进行对象创建已经是习以为常的事情,大
阅读全文
摘要:从此重构设计是如此重要,那么开发者的基本设计能力与素质又从何下手来培养呢?最好的办法,就是请个老师。从框架中了解,从系统中实现,从书文中汲取。然而,设计能力的提升绝非一朝一夕之功,软件开发中的设计大师,往往必须具备多年的修行方可称之为“架构师”。一个在简历中轻描淡写的“10年软件设计经验”,并非是所有软件人都能修炼成的真功夫,这里没有任何虚情假意可言。在一个项目的实现过程中,逐渐了解什么是对象、什么是对抽象编程、设计模式是如何应用在实际的系统架构、设计原则到底是什么秘密武器,而重要的是完成一个软件项目,对于更多人来说是认识一种软件开发的科学流程。这种体验,才是难能可贵的经验。在设计的广义概念里
阅读全文
摘要:NET也有闭包在.NET中,函数并不是第一级成员,所以并不能像JavaScript那样通过在函数中内嵌子函数的方式实现闭包,通常而言,形成闭包有一些值得总结的非必要条件: 嵌套定义的函数。 匿名函数。 将函数作为参数或者返回值。在.NET中,可以通过匿名委托形成闭包:delegatevoidMessageDelegate();staticvoidMain(string[]args){stringvalue="Hello,Closure.";MessageDelegatemessage=delegate(){Show(value);};message();}privat
阅读全文
摘要:王涛编著ISBN 978-7-121-14128-7 2011年7月出版定价:79.00元16开548页宣传语:以深入浅出的笔法,触摸.NET底层和框架的有趣角落,了解.NET平台的开发、设计与框架,剥丝抽茧,探微知著。从语言细节到设计架构,娓娓道来,一本经验结晶,一部面试宝典,一段技术百科内 容 简 介本书来自于微软MVP的最新技术心得和感悟,将技术问题以生动易懂的语言展开,层层深入,以例说理。全书主要包括了.NET基础知识及其深度分析,以.NETFramework和CLR研究为核心展开.NET本质论述,涵盖了.NET基本知识几乎所有的重点内容。全书分为5个部分,第1部分讲述.NET与面向.
阅读全文
摘要:你的名字比我生命更重要我是新中国恢复高考后的第一届(77 级) 大学生,大学及硕士毕业后到美国继续深造,在加州理工学院获得博士学位后加入英特尔并工作至今。从RCG[1] (应届毕业生)成长为英特尔为数不多的女性首席工程师,我在自己喜欢的这个岗位上已工作了17 年,美国的工作与生活都按部就班,恬淡舒适。与此同时,我也时时能感受到中国的巨大变化。这种飞速甚至看似有些“疯狂”的变化,让我在倍感自豪之余也心生艳羡。在美国学习工作的早期,没有人真正了解China 是什么样子,没有人知道这个国家每天都在发生些什么。慢慢的,随着改革开放力度的加大,超市里的“Made in China”从无到有直至随处可见,
阅读全文
摘要:机会总是光顾有准备的人我始终认为,机会总是光顾有准备的人。只要抓住机会,转变就在一瞬之间。因此,六年前,我毅然挥别在英特尔美国总部的职位以及即将升职的机会,来到了上海。也许是好机缘的垂青,在上海的六年间,通过不断尝试,不断寻求创新,我和团队在所经历的每个岗位上都创造出了不错的业绩。·艰难的抉择·我的英特尔之旅是从美国开始的。高中毕业时,我考进了中国科技大学物理专业。四年后,我成功申请到美国南加州大学知名的固体物理实验室攻读物理学博士的机会。拿到博士学位后,先是在凤凰城的Motorola 做半导体材料研发。随后在2000 年,加入了英特尔,负责晶体管技术和工艺集成方面的工作。
阅读全文
摘要:不让伤害再次发生我是英特尔成都工厂的第二批员工,在上海工厂学习培训之后,于 2005 年加入到成都封装测试工厂的启动和生产工作中,到 2010 年,我已经在成都工厂工作了五年半。在这五年半时间里,我始 终 在 封 装 工 程 部 任 工 程 师,负 责 站 点 的 设 备、工 艺 和 质 量, 确保站点按照相关计划和流 程 完 成 芯 片 的 封 装 工 作。 我 觉 得,我 的 工 作 对 象,或 者 说 我 的客户就是英特尔的一线操作员,我们要确保操作员在一个安全、高效、舒适的环境中工 作。 作为工程师,我们要规定操作员对机器的操作方式和方法。为了改进生产流程 和 帮 助 操 作 员 发
阅读全文
摘要:芯故事 心感动:英特尔企业文化的力量裴晓风编著ISBN 978-7-121-13101-1 2011 年7 月出版定价:49. 00 元16开400页内容简介本书通过英特尔在华员工感人的小故事,展示了英特尔中国二十五年的发展历程、战略投资、本土化、产业合作等鲜为人知的多个侧面,也从另外一个角度透视了中国IT产业的起步和发展的诸多根根节节;书中对英特尔企业文化精髓和魅力做了生动的展现,引发人们对企业本质、企业软实力进行更深入思考和探究,并为寻求人类社会的绿色发展的提供了直观、鲜明的案例,是IT产业人士、企业高管、企业文化研究人员以及MBA的案头必备。前言企业文化之魅在2010年全球经济持续回暖中
阅读全文
摘要:分布式数据库的字符集在分布式数据库中,还有一个问题经常容易被忽略,那就是数据库字符集。由于分布式数据库中涉及多个数据库的数据操作,所以保证数据库间的字符集一致(或按照业务需求的兼容),显得非常重要。通常来说,将所有数据库字符集设置为相同的是最简单和安全的方式。但如果涉及在分布式数据库中,不同的数据库存储有不同字符的数据,比如有简体中文、繁体中文、日语等,当出现这样的问题时,就要仔细考虑各个数据库的字符集问题了。关于字符集的设定,Oracle官方推荐如图12-3所示的做法。它的原则是:● 客户端的字符集应该等于数据库字符集,或是它的子集。● 在多个数据库中,最好设置成相同的,如果有特殊情况,那么
阅读全文
摘要:分布式数据库的优越性从图12-1中可以看到,用户可以通过任何一个数据库访问所有3个数据库中的数据,而不必同时去连接3个数据库。分布式数据库和数据复制型数据库有一些关系,就是数据库之间有关联和相互数据访问,但是它们的功能和目的是不同的,区别也确实显而易见。就像前面说的那样,分布式数据库强调数据的分布存储,在一个纯粹的分布式数据库中,在所有的数据库上,一种数据可能只有一份。而数据复制型数据库强调的是数据复制,通常是把一些数据库的数据向一个中心数据库中汇集。一般来说,数据复制型数据库的目的是提高本地数据的性能,因为将数据存储在一个数据库中就不会出现网络阻塞或者不稳定导致的性能问题。在海量数据的数据库
阅读全文
摘要:英特尔是个可以讲理的地儿“Logo Queen冶,是大家送给我的外号,我喜欢这个外号,因为以我多年的经验,一段广告放出来,我闭着眼睛听就能知道是哪一家IT 厂商的广告,而且知道Intel inside 那段音乐植入时间是否有3 秒。所以,对这个外号,我认为自己的确名副其实。·你就努力扑腾吧·我是2000 年11 月15 日加入英特尔的,至今已在内部换过三次岗位[1] ,既做过市场发展经理,进行联合市场营销;也供职过农村事务发展办公室,将英特尔医疗信息化建设项目延伸至农村;还针对文化公共服务行业做过业务拓展,并兼任医疗方面的市场工作。加入英特尔的前四年,我每天都是在“自觉加班
阅读全文

浙公网安备 33010602011771号