.NET设计规范:约定、惯用法与模式pdf下载

.NET设计规范:约定、惯用法与模式百度网盘pdf下载

作者:
简介:.NET设计规范:约定、惯用法与模式
出版社:
出版时间:2010-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

基本信息

书名:.NET设计规范—约定、惯用法与模式

定价:59元

作者:(美)克瓦林纳,(美)艾布拉姆斯 著

出版社:人民邮电出版社

出版日期:2010-1-1

ISBN:9787115214454

字数:557000

页码:443

版次:443

装帧:平装

开本:16开

商品重量:

编辑推荐


内容提要


本书关注直接影响框架可编程能力的设计问题,为框架设计师和广大开发人员设计高质量的软件提供了的指南,这一版更新至.NET 3.5。书中内容涉及框架设计的基本原则和规范,常用设计惯用法,为命名空间、类型、成员等框架各部分命名的规范,框架中常用设计模式的规范等。同时,书中添加了来自经验丰富的框架设计师、业界专家及用户给出的评注,为书中的许多规范增色不少。
  本书为框架设计师必读之作,也可用作.NET开发人员的技术参考书。

目录


1 Introduction 
 1.1 Qualities of a Well-Designed Framework 
  1.1.1 Well-Designed Frameworks Are Simple 
  1.1.2 Well-Designed Frameworks Are Expensive to Design 
  1.1.3 Well-Designed Frameworks Are Full of Trade-Offs 
  1.1.4 Well-Designed Frameworks Borrow from the Past 
  1.1.5 Well-Designed Frameworks Are Designed to Evolve 
  1.1.6 Well-Designed Frameworks Are Integrated 
  1.1.7 Well-Designed Frameworks Are Consistent 
2 Framework Design Fundamentals 
 2.1 Progressive Frameworks 
 2.2 Fundamental Principles of Framework Design 
  2.2.1 The Principle of Scenario-Driven Design 
  2.2.2 The Principle of Low Barrier to Entry 
  2.2.3 The Principle of Self-Documenting Object Models 
  2.2.4 The Principle of Layered Architecture 
3 Naming Guidelines 
 3.1 Capitalization Conventions 
  3.1.1 Capitalization Rules for Identifiers 
  3.1.2 Capitalizing Acronyms 
  3.1.3 Capitalizing Compound Words and Common Terms 
  3.1.4 Case Sensitivity 
 3.2 General Naming Conventions 
  3.2.1 WordChoice 
  3.2.2 Using Abbreviations and Acronyms 
  3.2.3 Avoiding Language-Specific Names 
  3.2.4 Naming New Versions of Esting APIs 
 3.3 Names of Assemblies and DLLs 
 3.4 Names of Namespaces 
  3.4.1 Namespaces and Type Name Conflicts 
 3.5 Names of Classes, Structs, and Interfaces 
  3.5.1 Names of Generic Type Parameters 
  3.5.2 Names of Common Types 
  3.5.3 Naming Enumerations 
 3.6 Names of Type Members 
  3.6.1 Names of Methods 
  3.6.2 Names of Properties 
  3.6.3 Names of Events 
  3.6.4 Naming Fields 
 3.7 Naming Parameters 
  3.7.1 Naming Operator Overload Parameters 
 3.8 Naming Resources 
4 Type Design Guidelines 
 4.1 Types and Namespaces 
  4.1.1 Standard Subnamespace Names 
 4.2 Choosing Between Class and Struct 
 4.3 Choosing Between Class and Interface 
 4.4 Abstract Class Design 
 4.5 Static Class Design 
 4.6 Interface Design 
 4.7 Struct Design 
 4.8 EnumDesign 
  4.8.1 Designing Flag Enums 
  4.8.2 Adding Values to Enums 
 4.9 Nested Types 
 4.10 Types and Assembly Metadata 
5 MemberDesign 
 5.1 General Member Design Guidelines 
  5.1.1 Member Overloading 
  5.1.2 Implementing Interface Members Explicitly 
  5.1.3 Choosing Between Properties and Methods 
 5.2 Property Design 
  5.2.1 Indexed Property Design 
  5.2.2 Property Change Notification Events 
 5.3 Constructor Design 
  5.3.1 Type Constructor Guidelines 
 5.4 Event Design 
  5.4.1 Custom Event Handler Design 
 5.5 Field Design 
 5.6 Extension Methods 
 5.7 Operator Overloads 
  5.7.1 Overloading Operator == 
  5.7.2 Conversion Operators 
 5.8 Parameter Design 
  5.8.1 Choosing Between Enum and Boolean Parameters 
  5.8.2 Validating Arguments 
  5.8.3 Parameter Passing 
  5.8.4 Members with Variable Number of Parameters 
  5.8.5 Pointer Parameters 
6 Designing for Extensibility 
 6.1 Extensibility Mechanisms 
  6.1.1 Unsealed Classes 
  6.1.2 Protected Members 
  6.1.3 Events and Callbacks 
  6.1.4 Virtual Members 
  6.1.5 Abstractions (Abstract Types and Interfaces) 
 6.2 Base Classes 
 6.3 Sealing 
7 Exceptions 
 7.1 Exception Throwing 
 7.2 Choosing the Right Type of Exception to Throw 
  7.2.1 Error Message Design 
  7.2.2 Exception Handling 
  7.2.3 Wrapping Exceptions 
 7.3 Using Standard Exception Types 
  7.3.1 ExceptCon and SystemExcept~on 
  7.3.2 AppL ~cat~onExcept~on 
  7.3.3 InvaL ~dOperat~onExceptCon 
  7.3.4 ArgumentExcept~on, ArgumentNuL LExcept~on, and ArgumentOutOfRangeExcept~on 
  7.3.5 NuL LReferenceExcept~on, IndexOutOfRangeExcept~on, and AccessVCoLatConExcept~on 
  7.3.6 StackOverfLowExcept~on 
  7.3.7 utOfMemoryExcept~on 
  7.3.8 ComExcept~on, SEHExceptCon, and Execut~onEng~ne-Exception 
 7.4 Designing Custom Exceptions 
 7.5 Exceptions and Performance 
  7.5.1 Tester-Doer Pattern 
  7.5.2 Try-Parse Pattern 
8 Usage Guidelines 
 8.1 Arrays 
 8.2 Attributes 
 8.3 Collections 
  8.3.1 Collection Parameters 
  8.3.2 Collection Properties and Return Values 
  8.3.3 Choosing Between Arrays and Collections 
  8.3.4 Implementing Custom Collections 
 8.4 DateTime and DateTimeOffset 
 8.5 ICloneable 
 8.6 IComparable and IEquatable 
 8.7 IDisposable 
 8.8 Nuiiable 
 8.9 Object 
  8.9.1 Object. EquaLs 
  8.9.2 Object. GetHashCode 
  8.9.3 Object. ToStrlng271
 8.10 Serialization 
  8.10.1 Choosing the Right Serialization Technology to Support 
  8.10.2 Supporting Data Contract Serialization 
  8.10.3 Supporting XML Serialization 
  8.10.4 Supporting Runtime Serialization 
 8.11 UrL 283
  8.11.1 System. Urn. Implementation Guidelines 
 8.12 System.Xml Usage 
 8.13 Equality Operators 
  8.13.1 Equality Operators on Value Types 
  8.13.2 Equality Operators on Reference Types 
9 Common Design Patterns 
 9.1 Aggregate Components 
  9.1.1 Component-Oriented Design 
  9.1.2 FactoredTypes 
  9.1.3 Aggregate Component Guidelines 
 9.2 The Async Patterns 
  9.2.1 Choosing Between the Async Patterns 
  9.2.2 Classic Async Pattern 
  9.2.3 Classic Async Pattern Basic Implementation Example 
  9.2.4 Event-Based Async Pattern 
  9.2.5 Supporting Out and Ref Parameters 
  9.2.6 Supporting Cancellation 
  9.2.7 Supporting Progress Reporting 
  9.2.8 Supporting Incremental Results 
 9.3 Dependency Properties 
  9.3.1 Dependency Property Design 
  9.3.2 Attached Dependency Property Design 
  9.3.3 Dependency Property Validation 
  9.3.4 Dependency Property Change Notifications 
  9.3.5 Dependency Property Value Coercion 
 9.4 Dispose Pattern 
  9.4.1 Basic Dispose Pattern 
  9.4.2 Finalizable Types 
 9.5 Factories 
 9.6 LINQ Support 
  9.6.1 Overview of LINQ 
  9.6.2 Ways of Implementing LINQ Support 
  9.6.3 Supporting LINQ through IEnumerabLe 
  9.6.4 Supporting LINQ through IOueryabLe~T~ 
  9.6.5 Supporting LINQ through the Query Pattern 
 9.7 Optional Feature Pattern 
 9.8 Simulating Covariance 
 9.9 Template Method 
 9.10 Timeouts 
 9.11 XAML Readable Types 
 9.12 And in the End... 
A C# Coding Style Conventions 
 A.1 General Style Conventions 
  A.1.1 Brace Usage 
  A.1.2 Space Usage 
  A.1.3 Indent Usage 
  A.1.4 Other 367
 A.2 Naming Conventions 
 A.3 Comments 
 A.4 File Organization 
B Using FxCop to Enforce the Framework Design Guidelines 
 B.1 What Is FxCop? 
 B.2 The Evolution of FxCop 
 B.3 How Does It Work? 
 B.4 FxCop Guideline Coverage 
  B.4.1 FxCop Rules for the Naming Guidelines 
  B.4.2 FxCop Rules for the Type Design Guidelines 
  B.4.3 FxCop Rules for Member Design 
  B.4.4 FxCop Rules for Designing for Extensibility 
  B.4.5 FxCop Rules for Exceptions 
  B.4.6 FxCop Rules for Usage Guidelines 
  B.4.7 FxCop Rules for Design Patterns 
C Sample API Specification 
Glossary 
Suggested Reading List 
Index

作者介绍


F YOU COULD STAND over the shoulder of every developer who is using your framework to write code and explain how it is supposea tobe used, guidelines would not be necessary. The guidelines presented inthis book give you, as the framework author, a palette o{ tools that allowyou to create a mon language between framework authors and thedevelopers who will use the frameworks. For example, exposing an opera-tion as a property instead of exposing it as a method conveys vital infor-mation about how that operation is to be used. In the early days of the PC era, the main tools for developing applica-tions were a programming language piler, a very small set of standardlibraries, and the raw operating system application programming inter-faces (APIs)-a very basic set of low-level programming tools. Even as developers were building applications using such basic tools,they were discovering an increasing amount of code that was repetitiveand could be abstracted away through higher-level APIs. Operating sys-tem vendors noticed that they could make it cheaper for developers tocreate applications for their systems if they provided them with suchhigher-level APIs. The number of applications that could run on the sys-tem would increase, which would then make the system more appealingto end users who demanded a variety of applications. Also, independenttool and ponent vendors quickly recognized the business opportuni-ties offered by raising the API abstraction level. ……

序言