.NET設計規(guī)范

出版時間:2010-1  出版社:人民郵電出版社  作者:Krzysztof Cwalina,,Brad Abrams  頁數:443  
Tag標簽:無  

前言

.NET Framework一推出,我就立即對它著了迷。這種技術讓CLR(通用語言運行庫)及其大量API,以及C#語言的優(yōu)勢立刻彰顯無遺。這些技術無不體現了API的通用設計風格和始終貫徹的一系列約定。這就是.NET文化。一旦你了解了這種文化,就容易把有關知識運用到框架設計的其他領域中去。過去16年里,我一直在從事開源軟件工作。由于開源的特點,開發(fā)者不僅文化背景不同,連開發(fā)時間也會跨越好幾年,這時堅守一種風格和編碼約定就顯得特別重要。雖然我們有維護人員,其日常的工作就是重寫或修改提交來的軟件,保證代碼遵守項目編碼標準和風格,但是,如果參與軟件項目的所有人一開始就使用項目的約定,當然就更為理想。通過實踐和標準所傳達出的信息越多,未來新加入的人員就越容易上手。這有利于項目匯聚和融合新老代碼。.NET Framework在成長,其開發(fā)者社區(qū)也在成長,人們不斷確定了新的實踐、模式和約定。Brad和Krzysztof挺身而出,成為了這些規(guī)則的“監(jiān)護人”,他們把這些新知識轉變?yōu)楝F在這本規(guī)范。他們通常會在博客里介紹新的約定,收集社區(qū)的反饋,再記錄下這些規(guī)范。在我看來,任何人若有興趣用好.NET Framework,則必須要常看他們的博客。這本書第1版出版以后,立即成為整個:Motto社區(qū)傳誦的經典,其原因大體有兩個。首先,我們可以由此了解各種.NET API實現的原委和方式;其次,我們珍視其為無價的規(guī)范,也努力貫徹在自己的程序和庫的設計過程中。第2版不僅建立在第1版成功的基礎之上,而且還添加了不少新的知識。許多規(guī)范還增加了注解,注解者本身就是行業(yè)里首屈一指的.NET架構師和偉大的程序員,正是他們幫助確定了這些規(guī)范。最后我要說,這本書遠不止是一本規(guī)范。它是我們熱愛的一部經典,可以幫助我們成為一名杰出的程序員,而這樣的程序員在我們行業(yè)里現在還為數不多。

內容概要

  本書關注直接影響框架可編程能力的設計問題,為框架設計師和廣大開發(fā)人員設計高質量的軟件提供了權威的指南,這一版更新至.NET 3.5。書中內容涉及框架設計的基本原則和規(guī)范,常用設計慣用法,為命名空間、類型、成員等框架各部分命名的規(guī)范,框架中常用設計模式的規(guī)范等。同時,書中添加了來自經驗豐富的框架設計師、業(yè)界專家及用戶給出的評注,為書中的許多規(guī)范增色不少。  本書為框架設計師必讀之作,也可用作.NET開發(fā)人員的技術參考書。

作者簡介

作者:(美國)克瓦琳娜(Krzysztof Cwalina) (美國)艾布拉姆斯(Brad Abrams)克瓦琳娜(Krzysztof Cwalina),微軟公司.NET Franmwork開發(fā)組項目經理。他為.NET Framework設計了多個API。還開發(fā)了FxCop等框架開發(fā)工具。目前,他正致力于在微軟內部開發(fā)推廣設計規(guī)范。將其應用到.NET Framework中。同時負責核心.NET Framework API的交付。艾布拉姆斯(Brad Abrams),微軟公司CLR開發(fā)組和.NET Framework開發(fā)組的創(chuàng)始人之一,目前是項目經理主管。他參與制定了CLS、.NET Framework設計規(guī)范以及ECMA/ISOCLI標準中程序庫標準。著有Programming in the.NET Environment、.NET Framework StandardLibrary Annotated Reference(卷1和卷2)等書。讀者可以從他的博客http://blogs.msdn.com/bradA/中了解他的最新想法。

書籍目錄

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 Existing 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

章節(jié)摘錄

插圖: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 common 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 compiler, 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 component vendors quickly recognized the business opportuni-ties offered by raising the API abstraction level.

媒體關注與評論

“本書第1版出版以后.立即成為整個Mono社區(qū)傳誦的經典……這一版彌補了上一版的很多不足。而眾多參與規(guī)范制定的核心.NET架構師及頂尖程序員所做的評注也極大地豐富了本書的內涵?!薄  狹iguel de Icaza.GNOME和Mono項目創(chuàng)建者“本書絕對是所有.NET開發(fā)人員的必讀之作。它總結了.NET本身設計和開發(fā)過程中獲得的經驗和教訓。不僅使你對.NET能夠知其所以然。還能極大地幫助你更高效地使用.NET類庫?!薄  狫effrey Richter,微軟技術大師,名著《Windows核心編程》作者

編輯推薦

《.NET設計規(guī)范:約定、慣用法與模式(第2版·英文版)》:數千名微軟精銳開發(fā)人員的經驗和智慧。最終濃縮在這本設計規(guī)范之中。與上一版相比。書中新增了許多評注。解釋了相應規(guī)范的背景和歷史,從中你能聆聽到微軟技術大師Andem Hejlsberg、Jeffrey Richter和Paul Vick等的聲音。讀來令人興趣盎然.欲罷不能?!?NET設計規(guī)范:約定、慣用法與模式(第2版·英文版)》雖然是針對.NET平臺上的框架設計的。但對其他平臺的框架設計同樣具有借鑒意義。新版根據.NET Framework 3.0和3.5的新特性做了全面更新,主要關注的是直接影響框架可編程能力的設計問題。遵守這些規(guī)范對于使用.NET Framework創(chuàng)建高質量的應用程序至關重要。微軟.N ET Framework設計組的智慧結晶洞悉.NET技術內幕.N ET開發(fā)者的必備圖書《.NET設計規(guī)范:約定、慣用法與模式(第2版·英文版)》提供配套光盤。內含Designing.NET Class Librarides等13個演講視頻(時長近13小時)。此外.光盤還包括.NETFramework類和組件設計指南、API規(guī)范樣例以及其他有用的資源和工具。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    .NET設計規(guī)范 PDF格式下載


用戶評論 (總計17條)

 
 

  •   從換行、縮寫、大小寫這些編碼約定講到異常、異步、非托管這些設計約定。
  •   還沒看,但原版書比較經典,還能鍛煉英文
  •   這本書講的很好,如果再多一點代碼示例就更好了
  •   書寫的不錯,還沒來得及看。
  •   如題目,英文的,還沒看,還準備買中文
  •   對了解.net的設計規(guī)范、提高查找?guī)旌瘮档男视袔椭瑢ψ约涸O計供他人調用的模塊也有指導意義。
  •   內容很棒,印刷一般,像是影印……
  •   用最普通的語言總結了.NET Framework 設計過程中點滴經驗,集合了眾多大師的精髓。無論是對于.NET Framework 編程,還是對于類似的框架設計都有非常好的借鑒意義!值得推薦!
  •     結果幾乎是考著對比原文看完的,什么"內部受保護的列表",把幾乎所有大家都知道的英文關鍵字都翻譯成中文,這就已經夠難讀的了,而且很多句子都部通順.怪不得這么快就絕版買不到了.
      書是好書,建議所有的.NET程序員都讀一下
  •     對于框架來說,最關鍵的品質應該是一致性。一旦用戶理解了框架的一部分,那么就應該能立即理解框架的其他部分
      
      
      框 架設計基本原則
      
       場景驅動設計原則 在設計框架時,必須從一組使用場景以及實現這些場景的樣例代碼開始
       低 門檻原則 框架必須以易于實驗的方式來為普通用戶提供一個低門檻
      
      
      
      不要提供抽象,除非為改抽象開發(fā) 出具體實現并用到改抽象的api對其進行過實際的測試
      
      
       由于一些開發(fā)人員只是想完成工作,(通常很簡單) 而不是想學習特性域提供的所有功能,因此為他們提供進過簡化的高層操作就顯得至關重要
      
      
      It-Just-Works
      
      
       一 條重要的api設計原則就是,要么完全隱藏復雜性(或幾乎完全隱藏),要么根本就不隱藏。最糟糕的就是設計一個看上去簡單的api,但當開發(fā)人員開始使用 時,卻(通常艱難地)發(fā)現事實并非如此。
      
      
       Create-Set-Call使用模式
      
      
      api 的用戶數量與簡單場景中new語句的數目成反比
  •      粗讀了一遍,感覺收獲很大。
      
       侯捷先生曾在他的《深入淺出MFC第二版》中有云“99.99999%的programmer終其一生不會設計一個application framework”,盡管如此,這本書更多地讓我看到了從設計者的角度來觀察如何更好地設計和使用框架來進行日常的開發(fā)活動。
      
       今年年初時,人民郵電出版了該書的第二版影印版,非常期待,我想我會很快重讀一次~
  •     書是以 "要...", "不要..." 組織的, 但精華在于, 關于為什么會這樣, 以及達成這個規(guī)范經歷過什么, 做了詳盡的介紹, 這點在 MSDN 上是沒有的, 或者限于篇幅, 寫得很簡略
      
      另外有收獲的地方是, 讀完全書, 對于 C# 的使用規(guī)范, 有了個系統(tǒng)的認識, 心里大體有譜了.
      關于設計, 很多書在講, 編碼規(guī)范, 也司空見慣, 但是針對語言講常用法的書不多.
      而當一位有經驗的程序員, 接觸一門新的語言時, 最需要的就是這方面的知識, 結果很多時候, 只能憑自己慢慢摸索, 或依靠其他語言上積累的經驗, 或者看語言教程中的示例, 或者看開源項目中的用法, 但都容易顯得零碎, 不夠系統(tǒng), 總有點踹踹然的感覺.
      很高興, 這本書我認為能夠承擔起 C# 上的這個職責, 就好比 <<Effective ...>> 在 C++ 上一樣.
  •     整本書的大部分內容都在講.Net Framework中是如何考慮變量命名和一些編碼相關的決策,設計的東西太少了,或者說我看此書時是希望該書可以討論.Net Framework類是如何設計,又如何一起協(xié)作,以及實現這些協(xié)作做了那些權衡,備選的方案為什么不是最優(yōu)的東西,這些信息太少了!
  •     程序和畫畫一樣,無非就是各種元素的控制和充填,只是把畫畫中的線條,點什么的變成了程序中的類,接口,函數,然后在統(tǒng)一構成一幅完整的畫卷(程序),如此而已。
      
      首先,本書好就好在,它告訴了你程序中的這些元素在.Net中應該如何使用,如何選擇。
      
      當你還在為選擇是用接口還是抽象類、使用值類型還是引用類型而困惑的時候,為如何更好的使用異常而迷惑的時候,大可以看看這本書,相信它會給你亮起一個小小的明燈的。
      
      其次,困擾軟件開發(fā)的一個重要問題,就是沒有辦法形成一套完整的工業(yè)化標準,100個人寫出來的代碼有100種風格,如果,你不想和其它99個人寫出來的代碼風格相差太遠的話,看看本書也還是有些益處的。
      
      再次,本書的一大特色就是加入了幾個.Net開發(fā)中絕對的牛人的評論,看著他們精辟的言論,相信你的眼界會開闊不少。他們中偶最偏愛的是Jeffrey,向Jeffrey老大致敬!
      
      最后,這本書真的很薄,在這大磚頭流行的年代里,看一本薄書本身也是一種幸福吧!
      
      ps:我才買的第一版,據說第二版就出來了,如果可以的話,還是直接買第二版的好。。。
      
      
  •     在書店瀏覽下這本書后就耗不猶豫的買了下來,在我看來這本書最大的好處并不緊緊是在告訴你
      “要...”“不要...”規(guī)范,有關于這些規(guī)范的內容也可以在MSDN上找到。書中精彩的部分在于Jeffrey Richter等人的注釋,你可以明白如:
      1)Dispose模式中GC.SuppressFinalize方法放在哪里,此處Jeffrey Richter給出了不同于《 Applied Microsoft .NET Framework programming 》中的方案;
      2)使用工廠方法和構造函數來需要的思考的地方;
      
      ......
      規(guī)范的考慮并不在于技術很detail的地方,要想設計一個高效的,合理的,別人易于使用的類庫,那么請不要錯過這本書!
  •   囧。。。原來你說的是.net。。。
  •   1)Dispose模式中GC.SuppressFinalize方法放在哪里,此處Jeffrey Richter給出了不同于《 Applied Microsoft .NET Framework programming 》中的方案;
    2)使用工廠方法和構造函數來需要的思考的地方;
    這種。。。 豈不是多入毛。。。
    還好圖靈
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網 手機版

京ICP備13047387號-7