前言


最近看了《FDG 2nd Edition》,也适当做了些笔记,在这里写这篇文章的目的主要有两个,一是对自己学习的一个记录、积累;另外,还可以用这篇总结向一些有需要的朋友推荐这本书。

书籍总结


这本书是MS公司的框架设计师,经过多年框架开发后的经验总结。

首先,它是一本设计规范。该书从规范的角度,规定了一个好的框架应该满足哪些条件、不应该犯什么错误。它从粗细不同的各个维度详细地列出了很多规范,细则细到变量名的命名,粗得粗到.NET中的模式应用规范。(早知道有这样一本书,我们就可以不用再为项目组编写代码设计规范了。哈哈。)

其次,这不但是一本“规范”,更是一本.NET平台上进行程序设计的指导书。

该书的前两章,讲解了一个好的框架应该满足哪些设计规约,例如简单易学、高一致性、自成文档、可升级性、易集成性等,并说明了这些性质对于一个框架来说为什么那么重要,甚至有时比一个框架的功能都还要重要。同时,还说明了在MS这样的公司,框架是怎么被开发出来的,例如其中用到了:框架用例分析与定义、场景驱动设计、TDD 等。

书中的第 3 章到第 8 章,主要列出了从命名,到类型设计,到类成员设计等一系列的规范。它对每一条规范进行解释,为什么要这样,这样有什么好处。例如,其中的一些规范看上去好像不是最好的,但是他们解释到,框架设计本身充满了抉择,当代的程序开发中,设计不能只考虑程序本身,还应该考虑集成开发环境在其中所扮演的角色。这几章中,最重要的莫过于第 6 章“扩展性设计”了。“一个OO模式的框架如何进行扩展?”“如何扩展更加简单易用更加流畅更加高效?”“事件好,还是虚方法好,怎么灵活使用它们?”一个好的开发框架,往往不只是实现功能那么简单,如何对框架进行扩展,经常也是框架设计师考虑得最多的。  这一点我个人深有体会,例如在“OEA框架”的开发过程中,耗费我们比较多时间的地方,主要是考虑如何对界面生成的各方面进行扩展,小到属性编辑器,大到整个窗体、模块。扩展并不是理论上支持就行了,必须切实地在各种粒度上进行专门的扩展性设计,否则,一个不易扩展的框架就会变得没有意义。打比方说,如果OEA只支持整个窗体生成的扩展,而不支持在现有生成基础上进行细粒度的扩展,那相当于告诉框架的使用者:“在任何一个生成细节上,如何OEA不能支持,那么请重写整个界面”,我相信没人会用这样的框架。扩展性设计的重要程度,还可以在框架本身的定义上看出来:“支持以某种回调机制进行扩展的软件半成品”。

第 9 章,也是最后一章,“通用设计模式”。本章的第一节相对来说较为重要:在API设计中,类型通常被分为两类来进行设计。一类是 Aggregate Component,是高层的API类型;另一类是 Factored Type,同样作为API,但是却提供更底层的控制。两种API概念不同,使用方法不同,设计方案也不尽相同。API的设计对于框架来说,也是举足轻重的一件事。随后的几节中,或多或少地都与这两个概念相关。主要还是讲了一些独立的设计模式,如:Async Pattern, Dispose Pattern, Factories, LINQ Support, Optional Feature Pattern, Simulating Covariance, Template Method 等。我就以工厂模式为例,来做一点总结:1. 直接使用构造函数,不能解决动态类型的构造,不能进行对象的管理(例如缓存)。 2. 工厂模式牺牲了可发现性、可用性及一致性来实现了灵活性,所以在使用时需要注意不被滥用。

后话


我之前一直没有看这本书,全靠自己不断地编写代码,不断地靠主观来分辨某个设计是不是好的。虽然现在感觉书上写的很多规范,其实自己已经慢慢地被“默化”了,但是感觉还是走了不少弯路。其实自己当初追求设计的美感,完全是靠模仿。在不断地学习.NET类库中,看别人是怎么写的,然后自己也跟着学,不断一点一点加强自己的设计能力。这些类库,一般也都是MS开发的。这样,久而久之,当一个设计放在面前的时候,一眼就能从API规范角度上看出它是否属于好的设计。

这里,我推荐以下任何一种类型的读者阅读这本书:

  1. 专注于.NET平台的任何开发人员。
  2. 理解了一般设计思想,但是想在.NET平台上深化设计的软件设计师。
  3. JAVA及.NET平台的框架设计人员。
  4. 想与和.NET类库一样优美代码的朋友。 :)

    模仿是很重要的一个学习方法。

这里,顺便总结一下另外一本书中学到的理论。为了提高自己的表达能力和口才,看了一本老婆推荐的书:《思维导图:提高语言智能的十种方法》。最终发现其实这本书对于社交和口才并没有什么关系。它分析了刚出生的孩子是如何学习语言的,然后总结出一些可以帮助外国人提高语言学习能力的技巧。但是这些技巧并不能提升交际能力,一是因为它们无法直接应用在汉语上,二是国内交际的重点并不是汉语的语法。

但是,想要学好英语或者想多学几门外语的话,不妨看看这本书,对于提升自己的语言学习能力,确实不错。

程序语言本身可以理解为一门外语,所以对于开发人员来说,这也算是蛮有用的。

这里,我列举一下脑中还记得的,学习语言的一些关键要素:

  1. 模仿
  2. 游戏。在游戏中学习,会事半功倍。
  3. 心态:热爱学习。
  4. 错误、失败都不要放在心上。想想小孩子。
  5. 坚持不懈。

《Framework Design Guidelines 2nd Edition》推荐相关推荐

  1. 《通信革命-无线带宽如何改变我们的世界》推荐!

    推荐一本古老的书,2000年的神书<Telecosm:How Infinite Bandwidth Will Revolutionize Our World>,中文版为<通信革命-无 ...

  2. 嵌入式开发模拟红外测距仪---UDP通信实现无线装置

    嵌入式开发疫情期间的模拟工作-UDP通信实现无线装置 嵌入式开发模拟红外测距仪 这学期学习嵌入式开发,由于没有硬件设备,因此课程主要由模拟构成 主要是通过UDP实现服务端和客户端的交互,客户端向服务端 ...

  3. 开吃吧无线订餐机 改变餐饮O2O外卖行业

    本文讲的是开吃吧无线订餐机 改变餐饮O2O外卖行业,北京一家中式快餐厅一到中午便忙的不可开交,收银员一边要为堂吃客点餐,一边要去给客人端茶送水,送外卖的伙计也不停的进进出出,堂吃生意风风火火,外卖生意 ...

  4. 它们改变了整个世界 盘点50个最伟大的游戏创意

    它们改变了整个世界 盘点50个最伟大的游戏创意 http://game.dbw.cn 2013-01-31 08:40:26 进入游戏论坛 http://game.dbw.cn/system/2013 ...

  5. 智能可穿戴设备改变移动支付世界

    智能可穿戴设备改变移动支付世界 2015-10-22 11:08 中关村在线 字号: 随着各大巨头公司生产出自家的智能设备之后,开始不满足就这单一市场,所以巨头目前都在移动支付领域竞相出招,希望能在这 ...

  6. 罗永浩曾经深刻地改变过这个世界

    罗永浩的一举一动都会成为头条,就算如今低调到微博只剩转发了,几乎一声不吭,也会有各种谣言追着贴上去,比如下面这个.相信不少人在各种媒体号上看过这个新闻,估计微信群朋友圈疯传好几遍了. 先造个谣,让谣言 ...

  7. C++语言,已经深深改变我们的世界

    C++之父Bjarne Stroustrup C++语言,已经深深改变我们的世界. 作为一门系统级编程语言,C++语言就像是C语言的超集,支持面向对象程序设计方法的所有概念,擅长面向对象程序设计,还可 ...

  8. 改变你的文字 改变你的世界

    改变你的文字 改变你的世界 这几个字说起来简单,但做起来是很难的. 表面上是改变文字, 而实质上是改变你的思维方式, 改变你的心态, 改变你看事物的角度. 视频中是不是有点夸张了呢? 改变几个文字的效 ...

  9. LoRa扩频、稳定通信、无线抄表、更远距离

    相比传统无线通信,LoRa能够在相同发射功率的情况下实现更远的通信距离,同时拥有更强的抗干扰能力. 因此,LoRa无线模组广泛应用于无线抄表等长距离无线通信应用中. 高成本单片机·稳定性更强 AS62 ...

  10. 通信原理——信号带宽、信道带宽、奈奎斯特带宽

    1.速率 为码元传输速率,又称传码率.符号速率.波特率,定义为每秒传输码元的速度,符号为波特(Baud),设每个码元的长度为(s),则有(Baud) 为信息传输速率,又称传信率.比特率,定义为每秒传输 ...

最新文章

  1. Spring 源码阅读 之 Spring框架加载
  2. 回答面试官:我“腿特长”!阿里云小哥哥小姐姐咋看( 0 x 0 )?
  3. TQ2440+RealViewMDK调试LED跑马灯(成功!)
  4. java 加载资源文件
  5. android 知识点大全,Android基础知识总结(一)
  6. 力扣133. 克隆图
  7. Android 系统(263)---Glide框架
  8. windows server 2008 DC 活动目录备份还原
  9. 自驾日产轩逸由沈阳去西藏拉萨,车辆和现在的路况到底行不行?
  10. R绘图 第九篇:绘制散点图和气泡图(ggplot2)
  11. 老罗Android开发视频分享
  12. sqluldr2 配置
  13. 路由器命令级别和用户级别
  14. 常用图片jpg png jpeg gif等格式介绍
  15. zkteco iface702 中控考勤机java开发步骤一---连接考勤机
  16. python-三天打渔、两天晒网 - 实验7 简单的循环程序
  17. 科研卫星服务的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 【模电】习题知识点总结(持续更新ing)
  19. Springmvc-简单入门
  20. c# picturebox 刷新_c# – 更新PictureBox时可能导致ArgumentException的原因是什么?

热门文章

  1. 长寿即服务:创业公司如何用AI技术颠覆传统药物研发
  2. 财报上的云计算战场: 巨头们垄断加剧
  3. 阿里智能对话交互实践与创新
  4. 除了码农,你还想做什么? | 每日趣闻
  5. 发推吐槽职场性别歧视后,苹果女高管被无限期行政休假
  6. 不是“老赖”是“真还”!罗永浩 6 亿债务还了 4 亿
  7. 腾讯云产业生态战略再升级,“4个100”与合作伙伴助力中小企业转型升级
  8. 教程:使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集
  9. Linux入门-7 Linux管道、重定向以及文本处理
  10. windows 注册表讲解