Adaptive Code Via C#读书笔记(1)

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

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

前四章

  • 在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

时间: 2024-11-05 06:45:48

Adaptive Code Via C#读书笔记(1)的相关文章

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

读书笔记:<梦断代码Dreaming in Code> 拿到<梦断代码>书后,一口气翻了一遍,然后又用了3天时间仔细读了一遍,也不禁掩卷长叹一声,做软件难.虽难,仍要继续走下去,可以把软件的范围限制得小一些,用敏捷方法等过程会使软件失败的风险小一些,毕竟我们还没有写书上所说的那样的大型软件. 第0章 软件时间 一开始看到第0章并没有感觉多么奇怪,可能程序员的思维方式已经固化在大脑中了,但读到作者关于第0章无意搞笑时,也不禁哑然失笑,为什么程序员要 从0开始计数?因为计算机从0开始计

OCP读书笔记(23) - 题库(ExamC)

200.Which operation requires that you create an auxiliary instance manually before executing the operation? (Choose all that apply.) A. Backup-based database duplication. B. Active database duplication. C. Tablespace point-in-time recovery. D. No ope

OCP读书笔记(21) - 题库(ExamA)

3.Your database is in ARCHIVELOG mode. You have two online redo log groups, each of which contains one redo member. When you attempt to start the database, you receive the following errors: ORA-00313: open failed for members of log group 1 of thread

Linux内核架构读书笔记 - 2.5.2 数据结构

调度系统各个组建关系如下 激活调度器两种方法:进程睡眠或其他原因放弃CPU,周期性检测 上述两个组件统称为通用调度器或核心调度器. 调度器用于判断接下来运行那个进程,内核支持不同的调度策略( 完全公平调度 实时调度 无事可做的空闲调度进程) 调度器被调用时候 需要执行体系相关的进程上下文切换 每个进程属于某个调度器类,各个调度器负责管理所属进程,通用调度器不涉及进程管理,都由调度器来 下面分别讲述: task_struct 成员 sched.h 1 struct task_struct { 2

《你必须知道的.NET》读书笔记一:小OO有大智慧

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象  (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个对象实体就完成了出生过程. Person aPerson = new Person("小周" , 25); (2)旅程:在某种程度上就是外界通过方法与对象交互,从而达到改变对象状态信息的过程.这也和人的生存之道暗合. aPerson.ChangeName("Edis

我编程,我快乐——读书笔记(二)

我编程,我快乐--读书笔记(二) 第二章 在产品上投资 1. 我之所以说自己有天赋,是因为我发现自己在工作中不断学习,并且不断进步. 2. 只有向这件产品中投入心血.汗水.眼泪和资金,才能使它真正具有价值. 3. 要主动问,不要等着别人来告诉你.授人以鱼不如授人以渔. 4. 如果你想要雇佣某人来为你工作,你会希望这个人总是要受那些专家的支配吗?我不愿意.我想要的是一个能够自立的员工. 5. 与客户的互动式非常重要的,清楚地了解客户的要求比似懂非懂然后自己填写细节要好得多. 6. 学习行业是如何运

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

一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C#的正确发音:See Sharp(而不是很多人说的什么C井之类的,每次听到C井我都只能呵呵一笑). 1.1 20世纪90年代末的Windows编程 这时大多数程序员使用VB.C或C++,一些C/C++程序员使用纯Win32API,但纯Win32API不是面向对象的,而且使用它的工作量很大,比MFC还大.大多数程序员在使用MFC(Microsoft Foundation Class,微软基

Linux内核架构读书笔记 - 2.5.4 核心调度器

什么是核心调度器? 参考前面的博文http://www.cnblogs.com/songbingyu/p/3696414.html 1 周期性调度器 作用: 管理内核中与整个系统和各个进程的调度相关的统计量 负责当前调度类的周期性调度方法 kernel/sched.c 1 /* 2 * This function gets called by the timer code, with HZ frequency. 3 * We call it with interrupts disabled. 4

自然语言处理一些读书笔记和自己的思考。

在知乎上搜索相关问题,有人推荐<数学之美>,之前粗略看过一次,这次想重新看一下并且做个读书笔记.下面是关于自然语言理解方面的一些读书笔记和自己的思考. 一. 自然语言处理历史: 自然语言处理最初发展的20多年里,相关科学家都极力通过电脑模拟人脑,试图用这种方式来处理人类语言,但是这种方式被证明是行不通的,成功几乎为零.NLP发展的第二阶段是70年代之后,科学家们终于找到了基于数学模型和统计的方法. 第一阶段的时候,学术界对人工智能和自然语言理解的普遍认识是:要让机器完成翻译或者语音识别等等,必