Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 3rd edition

Published by Addison-Wesley Professional (June 1, 2020) © 2020

  • Krzysztof Cwalina
  • Jeremy Barton
  • Brad Abrams
Products list
  • Available for purchase from all major ebook resellers, including InformIT.com
Products list

Details

  • A print text
  • Free shipping
  • Also available for purchase as an ebook from all major ebook resellers, including InformIT.com

This product is expected to ship within 3-6 business days for US and 5-10 business days for Canadian customers.

Framework Design Guidelines has long been the definitive guide to best practices for developing components and component libraries in Microsoft .NET. Now, this edition has been fully revised to reflect game-changing API design innovations introduced by Microsoft through eight recent updates to C#, eleven updates to .NET Framework, and the emergence and evolution of .NET Core.
Three leading Microsoft architects share the same guidance Microsoft teams are using to evolve .NET, so you can design well-performing components that feel like natural extensions to the platform. Building on the book’s proven explanatory style, the authors and expert annotators offer insider guidance on new .NET and C# concepts, including major advances in asynchronous programming and lightweight memory access. Throughout, they clarify and refresh existing content, helping you take full advantage of best practices based on C# 8, .NET Framework 4.8, and .NET Core.
  • Discover which practices should always, generally, rarely, or never be used—including practices that are no longer recommended
  • Learn the general philosophy and fundamental principles of modern framework design
  • Explore common framework design patterns with up-to-date C# examples
  • Apply best practices for naming, types, extensibility, and exceptions
  • Learn how to design libraries that scale in the cloud
  • Master new async programming techniques utilising Task and ValueTask
  • Make the most of the Core Memory and Span types for lightweight memory access
Figures xvii
Tables xix
Foreword to the Third Edition xxi
Foreword to the Second Edition xxiii
Foreword to the First Edition xxv
Preface xxvii
Acknowledgments xxxiii
About the Authors xxxv
About the Annotators xxxvii


Chapter 1: Introduction 1
1.1 Qualities of a Well-Designed Framework 3

Chapter 2: Framework Design Fundamentals 9
2.1 Progressive Frameworks 12
2.2 Fundamental Principles of Framework Design 15

Chapter 3: Naming Guidelines 41

3.1 Capitalization Conventions 42
3.2 General Naming Conventions 52
3.3 Names of Assemblies, DLLs, and Packages 61
3.4 Names of Namespaces 63
3.5 Names of Classes, Structs, and Interfaces 67
3.6 Names of Type Members 74
3.7 Naming Parameters 79
3.8 Naming Resources 81

Chapter 4: Type Design Guidelines 83
4.1 Types and Namespaces 85
4.2 Choosing Between Class and Struct 89
4.3 Choosing Between Class and Interface 92
4.4 Abstract Class Design 100
4.5 Static Class Design 102
4.6 Interface Design 104
4.7 Struct Design 106
4.8 Enum Design 111
4.9 Nested Types 124
4.10 Types and Assembly Metadata 127
4.11 Strongly Typed Strings 129

Chapter 5: Member Design 135
5.1 General Member Design Guidelines 135
5.2 Property Design 158
5.3 Constructor Design 165
5.4 Event Design 175
5.5 Field Design 180
5.6 Extension Methods 184
5.7 Operator Overloads 192
5.8 Parameter Design 202
5.9 Using Tuples in Member Signatures 220

Chapter 6: Designing for Extensibility 227
6.1 Extensibility Mechanisms 227
6.2 Base Classes 242
6.3 Sealing 244

Chapter 7: Exceptions 249
7.1 Exception Throwing 254
7.2 Choosing the Right Type of Exception to Throw 260
7.3 Using Standard Exception Types 273
7.4 Designing Custom Exceptions 279
7.5 Exceptions and Performance 281

Chapter 8: Usage Guidelines 287
8.1 Arrays 287
8.2 Attributes 291
8.3 Collections 294
8.4 DateTime and DateTimeOffset 306
8.5 ICloneable 308
8.6 IComparable<T> and IEquatable<T> 309
8.7 IDisposable 311
8.8 Nullable<T> 311
8.9 Object 312
8.10 Serialization 319
8.11 Uri 321
8.12 System.Xml Usage 323
8.13 Equality Operators 324

Chapter 9: Common Design Patterns 329
9.1 Aggregate Components 329
9.2 The Async Patterns 339
9.3 Dependency Properties 365
9.4 Dispose Pattern 372
9.5 Factories 394
9.6 LINQ Support 400
9.7 Optional Feature Pattern 408
9.8 Covariance and Contravariance 412
9.9 Template Method 423
9.10 Timeouts 426
9.11 XAML Readable Types 427
9.12 Operating on Buffers 430
9.13 And in the End... 464

Appendix A: C# Coding Style Conventions 465
A.1 General Style Conventions 466
A.2 Naming Conventions 480
A.3 Comments 482
A.4 File Organization 483

Appendix B: Obsolete Guidance 487

Appendix C: Sample API Specification 523


Appendix D: Breaking Changes 529
D.1 Modifying Assemblies 530
D.2 Adding Namespaces 531
D.3 Modifying Namespaces 532
D.4 Moving Types 532
D.5 Removing Types 533
D.6 Modifying Types 534
D.7 Adding Members 539
D.8 Moving Members 541
D.9 Removing Members 542
D.10 Overloading Members 544
D.11 Changing Member Signatures 545
D.12 Changing Behavior 553
D.13 A Final Note 556

Glossary 557
Index 563

Need help? Get in touch