原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_strp_1 

这本书的标题很失败:它不是讲C#而是讲敏捷的。不知道是因为Agile这个词用的太多了还是怎么样,弄了个Adaptive在标题里,副标题里倒是有Agile,可惜太不显眼了。如果让我来翻译的话我觉得标题可以是:代码的敏捷之道(基于C#语言进行描述)。可能长了点,但毕竟能让人一眼就知道这本书到底想要讲什么。

全书分成三部分,第一部分对敏捷开发尤其是Scrum的各个要素、原则、实践做了介绍。第二部分对SOLID原则(Single Responsibility Principle, Open/Close Principle, Liskov SubstitutionPrinciple, Interface Segregation, Dependency Injection)分别做了解释。第三部分模拟了一个项目的两个Sprint让读者有一个直观的认识。总体上讲,这是一本可以让读者增长见识的书,但并不算如何深入。比如,如果你想了解单元测试,可以去看《The Art of Unit Test》,如果你想了解SOLID原则,可以去看Bob大叔的《Agile Principles, Patterns, and Practices in C#》,如果想了解DI,可以去看《Dependency Injection in .NET》。

下面是我在阅读过程中记下的一些书中的细节和体会。

前四章

  • 在Sprint中,story的模式最好是这样的:As a XX, I want XX, so that。可以明确表明需求是由谁提出来的,具体内容是什么,目的又是什么。
  • Sprint最好周二周三周四开始和结束,不要选择在周一周五这样的日子
  • Sprint Evaluation常用的是用斐波那契数列打分的方式,如果时间紧的话也可以使用类似冒泡排序的方法。
  • 所有开发团队的成员都应该参与Demo。
  • Sprint应该有回顾,每次回顾都不是一次性的,下一次的回顾应该看一下上一次回顾中总结的问题有没有解决。
  • 对于Build,当code coverage下降的时候也应该Fail
  • 阶梯模式,将接口和实现放在不同的assembly中
  • fusion log可以检查assembly bind失败,需要修改注册表才能打开fusion log,有专门的工具assembly binding log viewer
  • chocolaty工具,可以下载和管理其他tool,例如filezilla
  • PostSharp等AOP库可靠attribute实现transaction, log等逻辑分离

  • Command/Query Separation模式。command返回为空,总是让系统做点什么,可以改变系统状态。Query向系统请求返回数据,不会改变系统的状态。架构层面:Command/Query Responsibility Seperation. QQQuery可以直接访问DAL.
  • Null object pattern可以减少单元测试的数量

  • Adapter模式分为class adaptrt和object adapter,后者更常见.
  • Impromptu可以实现类似dynamic的类型转换ActLike<T>方法,使用了反射,自动实现了object adapter模式

  • re-motion或者re-mix可以动态生成实现多个接口.
  • 单元测试的AAA模式也叫Given When Then模式。

单元测试部分一开始讲的太细,太初级,减分。

如果一个测试知道测试对象的实现细节而不是预期行为,那么这个测试就是over-specified

对单元测试这章表示失望

第五章

如果可以找到多个理由去改变一个类那通常意味着这个类有多个resopnsibility,这是不符合single responsibility原则的

adapter模式和strategy可以很好地实现single responsibility principle

第六章

open/close principle有两个定义,1988年Meyer的,是最常被引用的。

Software entities should be open for extention, but closed for modification.

Robot C. Martin有一个扩展的定义

”Open for extension.” This means that the behavior of the module can be extended. As the requirements of the application change, we are able to extend the module with new behaviors that satisfy those changes. In other words, we are able to change what the module does.
“Closed for modification.” Extending the behavior of a module does not result in changes to the source or binary code of the module. The binary executable version of the module, whether in a linkable library, a DLL, or a Java .jar, remains untouched.
—Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices
(Prentice Hall, 2003)

第七章

不要使用decimal表示货币,考虑使用Money类型

http://moneytype.codeplex.com

使用Contract.Result<>在postcondition中获取返回值比使用本地变量更好

可以给接口定义一个ContractClass,这个类专门用于定义这个接口的Contract

contravariance颠倒了类的依赖关系,这与通常的直觉相反

covariance和contravariance是Liskov原则的基础

子类中不应该定义新的异常,而是应该继承父类的异常。否则客户代码可能会不得不引用新的异常,乃至每次有新的异常客户端代码都要修改。

第八章

接口隔离原则在权限控制中非常有用

第九章

sec parser好像就是illegitimate injection,是错误的,不应该有默认的无参构造函数,不应该在该构造函数中创建实现类。

可以创建默认的container,convention over configuration

Adaptive Code Via C#读书笔记的更多相关文章

  1. “Clean Code” 读书笔记序

    最近开始研读 Robert C.Martin 的 “Clean Code”,为了巩固学习,会把每一章的笔记整理到博客中.而这篇博文作为一个索引和总结,会陆续加入各章的笔记链接,以及全部读完后的心得体会 ...

  2. 读书笔记:《梦断代码Dreaming in Code》

    读书笔记:<梦断代码Dreaming in Code> 拿到<梦断代码>书后,一口气翻了一遍,然后又用了3天时间仔细读了一遍,也不禁掩卷长叹一声,做软件难.虽难,仍要继续走下去 ...

  3. Code Clean读书笔记

    代码整洁之道读书笔记 by fangpc 序言部分 "神在细节之中" - 建筑师路德维希 5S哲学(精益) 整理(Seiri):搞清楚事物之所在--通过恰当地命名之类的手段--至关 ...

  4. 《Small Memory Software:Patterns For System With Limited Memory》读书笔记

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/13297447 虽然摩尔定律让我们的计算机硬件得以以指数速度升级,但反摩尔定律又不断消减这些 ...

  5. C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)

    因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...

  6. TJI读书笔记17-字符串

    TJI读书笔记17-字符串 不可变的String 重载”+”和StringBuilder toString()方法的一个坑 String上的操作 格式化输出 Formatter类 字符串操作可能是计算 ...

  7. TJI读书笔记16-异常处理

    TJI读书笔记16-异常处理 概念 基本异常情形 异常的捕获 自定义异常 异常说明 捕获所有异常 栈轨迹 重新抛出异常 Java标准异常 使用finally 异常的限制 构造器 异常的匹配 其他乱七八 ...

  8. WPF,Silverlight与XAML读书笔记第四十七 - Silverlight与浏览器

    说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 这部分内容主要介绍Silverlight与浏 ...

  9. 《C#图解教程》读书笔记之一:C#和.NET框架

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...

随机推荐

  1. SCC重新建图

    Tarjan或Kosaraju算法[对每个点归类belong]求出SCC之后,对num_scc个SCC重新建图,针对不同问题,考虑重边的问题. //************************** ...

  2. 【C#】VS2015开发环境的安装和配置(二)2016-08-03更新

    分类:C#.VS2015.WPF.ASP.NET MVC.Android.iOS.Unity3D: 更新日期:2016-08-03 按下面介绍的步骤安装即可. 一.安装JDK和Android SDK ...

  3. MVC之前的那点事儿系列(2):HttpRuntime详解分析(上)

    文章内容 从上章文章都知道,asp.net是运行在HttpRuntime里的,但是从CLR如何进入HttpRuntime的,可能大家都不太清晰.本章节就是通过深入分析.Net4的源码来展示其中的重要步 ...

  4. 基于吉日嘎底层架构的Web端权限管理操作演示-日志管理

    权限管理要实现的效果是对“ 谁”可以访问“什么内容”,可以进行“哪些操作” 一系列权限的精细化控制.衡量一个软件好坏的重要标准是:它的权限体系是否足够细致.是否可以立体勾勒出信息对象的访问控制.前面4 ...

  5. 【Java每日一题】20161013

    package Oct2016; public class Ques1013{ public static void main(String[] args){ new Obj(); } } class ...

  6. 基于类型系统的面向对象编程语言Go

    (整理自网络) 面向对象编程 Go语言的面向对象编程(OOP)非常简洁而优雅.说它简洁,在于它没有了OOP中很多概念,比如:继承.虚函数.构造函数和析构函数.隐藏的this指针等等.说它优雅,是它的面 ...

  7. 【FOL】第二周

    一直在忙其他事情,停了好久了.终于又可以开始做点东西了. 这周主要工作: 1.整理客户端代码,加入网络模块:fol.client.net. 2.写了个简单的版本服务端程序. 3.初步完成了自动更新功能 ...

  8. [javascript] 对象拷贝

    Object.prototype.clone = function() { var copy = (this instanceof Array) ? [] : {}; for (attr in thi ...

  9. GJM :用JIRA管理你的项目(三)基于LDAP用户管理 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  10. 设计3D标签

    java自带的Label太枯燥了,真是拿不出手啊. 所以,我们要设计3D标签!! 看看下面这张图 原理 看看这图,可以看到哈哈有三种颜色:白色.黑色和灰色 实现的时候并不像PS那样,按几个按钮就O了 ...