《.Net 最佳实践》 - 学习笔记
《.Net 最佳实践》
========== ========== ==========
[作者] (美) Stephen Ritchie
[译者] (中) 黄灯桥 黄浩宇 李永
[出版] 机械工业出版社
[版次] 2014年01月 第1版
[印次] 2014年01月 第1次 印刷
[定价] 69.00元
========== ========== ==========
(P001)
开发人员应该对任何称之为“最佳实践”的实践保持一种怀疑态度。
开发人员应该根据他所在的具体环境来选择采用何种“最佳实践”。
(P009)
微软的 Visual Studio IDE 就是一款得到广泛使用的集成开发环境。
(P016)
我仔细阅读了《.NET 设计规范》的每一章,从中我了解到了 .NET 框架是如何构建的。这本书同时还记录了设计构建 .NET 框架团队的思考结晶。通过这本书可以学习到许多非常重要的 .NET 实践,它是一项非常重要的资源。
FxCop 工具可以看成是对《.NET 设计规范》的补充。它会帮助你对 .NET 程序集按照事先指定的规则进行一一检查。
(P044)
在软件项目中,各项活动都不是目标。所有的活动都必须以获得成果为目标。
(P063)
头脑风暴就是促进“想法和经验”合作的方式。
(P065)
只有通过沟通,才能让你的想法成为别人的想法。
(P068)
要安排好工作,把需要动脑的和复杂的挑战性工作放到项目开始时进行。把那些简单和要求不高的任务留到后面去做。为挑战性任务留更多的时间去思考和探索更好的方法很重要。
(P069)
通过学习其他人的经验,就可以在问题发生前预防问题发生。
使用别人的经验是一种高杠杆方法,可以避免困难、费时的问题。
(P071)
经验学习就是对找到的或工作接触到的材料的理解。许多东西只能通过经验来理解。新知识需要通过参与或接触软件技术来获得。技能需要结合技术通过实践来获得。任何书面形式的东西都要通过经验来改进和提高。
(P077)
在捕捉和重新抛出异常的时候,编写一个空的 throw 语句。这是既定的保留调用栈的方式。空的 throw 语句可以确保栈跟踪到方法异常的起源位置,以便帮助调试错误。
(P078)
使用 disposable 模式是 .NET 用来释放本地和非托管资源的主要机制。
(P079)
当 .NET 类型拥有本地资源或 disposable 字段,该类型就应该实现 IDisposable 。
(P081)
语句 using 允许代码去声明实现了 IDisposable 的对象在何时应该被正确释放。
(P082)
为了防止两次调用 Dispose 方法,编写代码时可使用一个 try-finally 块来代替外层的 using 语句。
(P084)
一个未初始化的枚举的默认值是 0 。
在适当的时候显式定义零枚举元素。
(P085)
每当空的实例在语义上等于返回空值时,返回一个空的实例,如 String.Empty 。
定义一个公开可见的字段 static readonly ,以这种方式声明的字段允许改变值而无须客户端程序集重新编译以接收更新值。
(P087)
变量名应该很易理解,变量名必须表明该变量代表的是什么。变量名必须是明确的、正确的和一致的。
(P093)
扩展方法必须被定义为静态类的静态方法,且要确定方法的签名中的第一个参数的前面要放置 this 关键字。
扩展方法不可以扩展一个静态类。另外,如果扩展方法的签名与类型的现有方法的签名相同,那么该扩展方法永远不会被调用。
(P094)
一般来说,扩展方法是一种为封闭类型进行改造的有效方法,可为其添加新的行为和功能。
在某些情况下,使用 var 关键字是必需的。如果要让匿名类型工作,隐式类型的局部变量就是必需的。由于类型是匿名的,开发人员不能明确指定变量的类型。编译器会自动处理所有的匿名类型的隐式类型。
(P096)
在 C# 语言中,引用类型(类、接口、泛型和委托)的变量可分配空值。值类型(枚举、数字类型、布尔类型和用户定义的struct)不能分配空值。
在 .NET 2.0 中引入可以为空的类型,用来为一个基本值类型的变量分配一个空值。这些可为空的类型是 System.Nullable<T> 结构的实例,其中的类型参数 T 是值类型。更常见的是语法 “T?”,是 System.Nullable<T> 的简写,其中的 T 是值类型。
(P102)
从 .NET 2.0 开始,C# 语言就有两种形式的泛型:
泛型类型:使用一个或多个类型参数定义类、结构、接口或委托;
泛型方法:使用一个或多个类型参数定义的方法;
(P103)
随着 .NET 3.0 引入 LINQ,查询进入 C# 并作为一种主要的语言构造,成为 foreach 循环、委托和扩展方法的基础。
(P104)
LINQ 的内容很多。有许多相关的语言特性对 LINQ 来说是必不可少的,包括扩展方法、 Lambda 表达式、匿名数据类型以及分部方法。还有很多关键字和很多查询结构。
(P107)
实体框架 (Entity Framework)、NHibernate 和 LINQ to SQL 都可以提供数据库 LINQ,并且都支持延迟执行。
(P119)
命名约定使用 “<被测试类> + Tests” 的格式来命名包含了测试方法的类。
在测试类 (tests class) 中,单词 Tests 故意使用了复数。它的意思是包含了测试的类,也被称为测试夹具类。
测试方法的名称需要明确以下三个重要的事情:被测试方法; 测试执行的条件;测试通过后的预期结果;
测试方法的命名约定要符合可读性模式,并能清楚表达测试的意图。
这个约定是“被测试方法_指定的条件_期望的结果” (MethodUnderTest_WithSpecifiedCondition_ExpectThisResult)。
3A模式“安排-动作-断言 (Arrange-Act-Assert)”是一种广泛使用和有益的约定。
《.Net 最佳实践》 - 学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- 在ensp上模拟企业网络场景并Access接口加入相应VLAN
模拟的企业网络大概描述: 公司内网是一个大的局域网,二层交换机S1放置在一楼,在一楼办公的部门有IT部和人事部:二层交换机S2放置在二楼,在二楼办公的部门有市场部和研发部.由于交换机组成的是广播网,交 ...
- IDM下载工具使用
平时网上找资料,找视频,难免都需要下载到本地,奈何下载速度都一般,最近发现一款多线程下载工具,堪称无敌!!
- Android 如何动态添加 View 并显示在指定位置。
引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...
- day28
断点调试 在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈 变红的地方,程序执行到,就会暂停 断点应该加在报错之前 绿色箭头表示快速跳到下一个断点执行 控制台报错,点击你能看懂的最后一行,光标会 ...
- kubectl exec 在kubelet中的处理流程
基于kuebrnetes v1.17 简单来说,一个完整的streaming请求如下: 客户端 kubectl exec -i -t ... kube-apiserver 向 Kubelet 发送流式 ...
- 即将到来的“分布式云”(DPaaS):分布式计算+ DB +存储即服务
我在区块链会议上就即将到来的公共"分布式云"系统进行了讨论,该系统将主流的公共云平台(如AWS,Azure,Google Cloud,Heroku等)与区块链和P2P网络相结合,比 ...
- python3.6异步IO包asyncio部分核心源码思路梳理
关于python异步编程的演进过程,两篇文章阐述得妥妥当当,明明白白. 中文资料:https://mp.weixin.qq.com/s?__biz=MzIxMjY5NTE0MA==&mid=2 ...
- Python 命令行之旅:深入 click 之增强功能
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- 【原创】003 | 搭上基于SpringBoot事务思想实战专车
前言 如果这是你第二次看到师长,说明你在觊觎我的美色! 点赞+关注再看,养成习惯 没别的意思,就是需要你的窥屏^_^ 专车介绍 该趟专车是开往基于Spring Boot事务思想实战的专车,在上一篇 搭 ...
- NumPy 学习 第三篇:矢量化和广播
矢量化 矢量化是指用数组表达式替换显式的for循环.在Python中循环数组或其他跟数组类似的数据结构时,使用循环会涉及很多开销.NumPy中的矢量化操作把内部循环委托给高度优化的C和Fortran函 ...