This book covers a multitude of topics in varying degrees of detail and offers a lot of advice. However, it is sometimes difficult to judge just how important any given piece of information is in the context of a long, technical description.
This appendix consolidates many of the best practices noted throughout the book into a single list, so you can tell at a glance whether you are following the popular and recommended patterns and practices set forth in this book.
The NuGet package manager is a great boon to developers and teams alike. Instead of spending loads of time checking to see if the projects that your application depends on have released new versions, let NuGet handle all of that for you!
If your organization has several teams that share common libraries, consider creating custom NuGet packages for those shared libraries and hosting a custom NuGet repository to provide more effective distribution and versioning.
Abstractions encourage loosely coupled systems with a healthy separation of contracts and implementations. Abstractions are easily interchanged, which not only provides easier maintenance but is also crucial to unit testing.
Any time you employ the
new keyword to create
a new instance of a concrete type, you are—by definition—not depending on
an abstraction. Though this is often not a problem at all (e.g.,
new List<string>() ...