Update dotnet-cheatsheet.html
· 1 year ago
642f2a5f0ed342032aaa5774b55199af26ec31e5
Parent:
160539f06
1 file changed +523 −55
- dotnet-cheatsheet.html +523 −55
Diff
--- a/dotnet-cheatsheet.html +++ b/dotnet-cheatsheet.html @@ -248,7 +248,7 @@ <div class="card-body"> <h5><i class="bi bi-tools"></i> .NET SDK</h5> <div class="card-content-wrapper"> - <p class="summary">The <span class="term">Software Development Kit</span> providing tools to <span class="term">develop, build, test, and publish</span> .NET applications. Includes the .NET CLI, compilers, and runtime.</p> + <p class="summary">The <span class="term">Software Development Kit</span> providing tools to <span class="term">develop, build, test, and publish</span> .NET applications. Includes the .NET CLI, compilers, and runtime. <a href="https://learn.microsoft.com/en-us/dotnet/core/sdk" target="_blank" rel="noopener noreferrer">SDK Overview</a></p> <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDotnetSdk" aria-expanded="false" aria-controls="collapseDotnetSdk"> Details <i class="bi bi-chevron-down"></i> </button> @@ -259,10 +259,10 @@ <p>A comprehensive suite of tools essential for the .NET development lifecycle.</p> <h6>Key Components</h6> <ul> - <li><strong>.NET CLI (`dotnet`):</strong> Command-line interface for creating, restoring dependencies, building, running, testing, and publishing applications. <a href="https://learn.microsoft.com/en-us/dotnet/core/tools/" target="_blank" rel="noopener noreferrer">Docs</a></li> - <li><strong>Compilers:</strong> Roslyn for C# and VB.NET, F# compiler. Translates source code to CIL.</li> + <li><strong>.NET CLI (`dotnet`):</strong> Command-line interface for creating, restoring dependencies, building, running, testing, and publishing applications. <a href="https://learn.microsoft.com/en-us/dotnet/core/tools/" target="_blank" rel="noopener noreferrer">.NET CLI Docs</a></li> + <li><strong>Compilers (Roslyn):</strong> C# and Visual Basic compilers. F# has its own compiler. Translates source code to CIL. <a href="https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/" target="_blank" rel="noopener noreferrer">Roslyn Overview</a> [38]</li> <li><strong>Runtime & Libraries:</strong> Includes the .NET Runtime and Base Class Library (BCL) necessary to run apps.</li> - <li><strong>Build System (MSBuild):</strong> Handles the build process based on project files (`.csproj`, `.fsproj`). <a href="https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild" target="_blank" rel="noopener noreferrer">MSBuild Docs</a></li> + <li><strong>Build System (MSBuild):</strong> Handles the build process based on project files (`.csproj`, `.fsproj`). <a href="https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild" target="_blank" rel="noopener noreferrer">MSBuild Docs</a> [3, 23]</li> </ul> <h6>Use Cases</h6> <p>Essential for any .NET development, from simple console apps to complex web services and cross-platform applications.</p> @@ -272,9 +272,9 @@ <div class="col-lg-4 col-md-6"> <div class="info-card card-platform" id="card-dotnet-runtime"> <div class="card-body"> - <h5><i class="bi bi-cpu"></i> .NET Runtime (CoreCLR)</h5> + <h5><i class="bi bi-cpu"></i> .NET Runtime</h5> <div class="card-content-wrapper"> - <p class="summary">The execution environment for .NET applications. Manages <span class="term">memory (GC)</span>, <span class="term">JIT compilation</span>, type safety, and exception handling.</p> + <p class="summary">The execution environment for .NET applications. Manages <span class="term">memory (GC)</span>, <span class="term">JIT compilation</span>, type safety, and exception handling. <a href="https://learn.microsoft.com/en-us/dotnet/core/introduction#net-runtime" target="_blank" rel="noopener noreferrer">Runtime Overview</a></p> <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDotnetRuntime" aria-expanded="false" aria-controls="collapseDotnetRuntime"> Details <i class="bi bi-chevron-down"></i> </button> @@ -283,12 +283,12 @@ <div class="collapse collapse-content" id="collapseDotnetRuntime"> <h6>Purpose</h6> <p>Provides the foundational services required to execute managed .NET code.</p> - <h6>Core Components (CoreCLR)</h6> + <h6>Core Components (CoreCLR for most .NET, Mono for MAUI on mobile)</h6> <ul> <li><strong>JIT (Just-In-Time) Compilation:</strong> Converts CIL bytecode into native machine code at runtime. <a href="https://learn.microsoft.com/en-us/dotnet/standard/managed-code" target="_blank" rel="noopener noreferrer">Managed Code</a></li> <li><strong>Garbage Collection (GC):</strong> Automatic memory management, reclaiming unused objects. <a href="https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/" target="_blank" rel="noopener noreferrer">GC Docs</a></li> - <li><strong>Type System (CTS):</strong> Enforces type safety and defines how types are declared, used, and managed.</li> - <li><strong>Exception Handling:</strong> Manages structured error handling.</li> + <li><strong>Type System (CTS):</strong> Enforces type safety and defines how types are declared, used, and managed. <a href="https://learn.microsoft.com/en-us/dotnet/standard/base-types/common-type-system" target="_blank" rel="noopener noreferrer">CTS Docs</a></li> + <li><strong>Exception Handling:</strong> Manages structured error handling. <a href="https://learn.microsoft.com/en-us/dotnet/standard/exceptions/" target="_blank" rel="noopener noreferrer">Exception Handling</a></li> <li><strong>Security:</strong> Provides mechanisms for code access security and verification.</li> </ul> <p>Briefly, <span class="term">Mono</span> is used for Xamarin/MAUI on iOS/Android, and <span class="term">NativeAOT</span> compiles .NET to native code ahead-of-time. <a href="https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/" target="_blank" rel="noopener noreferrer">NativeAOT Docs</a></p> @@ -314,19 +314,18 @@ <li><strong>`System` Namespace:</strong> Core types (`string`, `int`, `DateTime`), I/O (`File`, `Stream`), collections (`List<T>`, `Dictionary<TKey,TValue>`), console operations. <a href="https://learn.microsoft.com/en-us/dotnet/api/system" target="_blank" rel="noopener noreferrer">System Namespace</a></li> <li><strong>`System.Linq` Namespace:</strong> Language Integrated Query for querying objects, XML, and databases. <a href="https://learn.microsoft.com/en-us/dotnet/csharp/linq/" target="_blank" rel="noopener noreferrer">LINQ Docs</a></li> <li><strong>`System.Text.Json` Namespace:</strong> High-performance JSON serialization and deserialization. <a href="https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/overview" target="_blank" rel="noopener noreferrer">System.Text.Json Docs</a></li> - <li><strong>`System.Net.Http` Namespace:</strong> Modern HTTP client functionalities (`HttpClient`). <a href="https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient" target="_blank" rel="noopener noreferrer">HttpClient</a></li> + <li><strong>`System.Net.Http` Namespace:</strong> Modern HTTP client functionalities (`HttpClient`). <a href="https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient" target="_blank" rel="noopener noreferrer">HttpClient Docs</a></li> <li><strong>`System.Threading.Tasks` Namespace:</strong> Asynchronous programming with `Task` and `Task<T>` (async/await). <a href="https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/" target="_blank" rel="noopener noreferrer">Async Programming</a></li> </ul> </div> </div> </div> - <!-- Add CIL and Assemblies cards here following the same pattern --> <div class="col-lg-4 col-md-6"> <div class="info-card card-platform" id="card-cil"> <div class="card-body"> <h5><i class="bi bi-file-earmark-code"></i> CIL / MSIL</h5> <div class="card-content-wrapper"> - <p class="summary"><span class="term">Common Intermediate Language</span> (formerly MSIL). The platform-agnostic compiled output of .NET languages, executed by the CLR.</p> + <p class="summary"><span class="term">Common Intermediate Language</span> (formerly MSIL). The platform-agnostic compiled output of .NET languages, executed by the CLR. <a href="https://learn.microsoft.com/en-us/dotnet/standard/managed-execution-process#cil-and-jit-compilation" target="_blank" rel="noopener noreferrer">CIL and JIT</a></p> <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCil" aria-expanded="false" aria-controls="collapseCil"> Details <i class="bi bi-chevron-down"></i> </button> @@ -334,12 +333,12 @@ </div> <div class="collapse collapse-content" id="collapseCil"> <h6>Purpose</h6> - <p>Serves as an intermediate instruction set that can be JIT-compiled to native code on any platform supporting a .NET runtime. This enables language interoperability and platform independence. <a href="https://learn.microsoft.com/en-us/dotnet/standard/managed-execution-process#cil-and-jit-compilation" target="_blank" rel="noopener noreferrer">Managed Execution</a></p> + <p>Serves as an intermediate instruction set that can be JIT-compiled to native code on any platform supporting a .NET runtime. This enables language interoperability and platform independence. <a href="https://learn.microsoft.com/en-us/dotnet/standard/managed-execution-process" target="_blank" rel="noopener noreferrer">Managed Execution Process</a></p> <h6>Characteristics</h6> <ul> <li><strong>CPU-Agnostic:</strong> Not tied to a specific processor architecture.</li> <li><strong>Verifiable:</strong> Can be verified for type safety by the CLR.</li> - <li><strong>Contains Metadata:</strong> Includes information about types, members, and references.</li> + <li><strong>Contains Metadata:</strong> Includes information about types, members, and references within assemblies.</li> </ul> </div> </div> @@ -349,7 +348,7 @@ <div class="card-body"> <h5><i class="bi bi-archive"></i> Assemblies & Metadata</h5> <div class="card-content-wrapper"> - <p class="summary">Units of <span class="term">deployment and versioning</span> in .NET (DLLs or EXEs). Contain CIL code and self-describing <span class="term">metadata</span>.</p> + <p class="summary">Units of <span class="term">deployment and versioning</span> in .NET (DLLs or EXEs). Contain CIL code and self-describing <span class="term">metadata</span>. <a href="https://learn.microsoft.com/en-us/dotnet/standard/assembly/" target="_blank" rel="noopener noreferrer">Assemblies in .NET</a></p> <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseAssemblies" aria-expanded="false" aria-controls="collapseAssemblies"> Details <i class="bi bi-chevron-down"></i> </button> @@ -357,10 +356,10 @@ </div> <div class="collapse collapse-content" id="collapseAssemblies"> <h6>Purpose</h6> - <p>Assemblies are the building blocks of .NET applications, packaging types and resources. Metadata allows the runtime to understand the types within an assembly without needing separate header files or an IDL. <a href="https://learn.microsoft.com/en-us/dotnet/standard/assembly/" target="_blank" rel="noopener noreferrer">Assemblies in .NET</a></p> + <p>Assemblies are the building blocks of .NET applications, packaging types and resources. Metadata allows the runtime to understand the types within an assembly without needing separate header files or an IDL.</p> <h6>Key Aspects</h6> <ul> - <li><strong>Manifest:</strong> Contains assembly metadata (name, version, culture, referenced assemblies, security permissions).</li> + <li><strong>Manifest:</strong> Contains assembly metadata (name, version, culture, referenced assemblies, security permissions). <a href="https://learn.microsoft.com/en-us/dotnet/standard/assembly/manifest" target="_blank" rel="noopener noreferrer">Assembly Manifest</a></li> <li><strong>Types:</strong> The CIL code for the types defined in the assembly.</li> <li><strong>Resources:</strong> Embedded resources like images or strings.</li> <li><strong>Scoping:</strong> Defines a boundary for type resolution and versioning.</li> @@ -389,14 +388,14 @@ <div class="collapse collapse-content" id="collapseAspnetcore"> <h6>Key Sub-Frameworks/Patterns</h6> <ul> - <li><strong>Minimal APIs:</strong> Lightweight syntax for creating HTTP APIs. <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis" target="_blank" rel="noopener noreferrer">Minimal APIs</a></li> - <li><strong>MVC (Model-View-Controller):</strong> Pattern for building web UIs and APIs. <a href="https://learn.microsoft.com/en-us/aspnet/core/mvc/overview" target="_blank" rel="noopener noreferrer">MVC</a></li> - <li><strong>Razor Pages:</strong> Page-centric model for building web UIs. <a href="https://learn.microsoft.com/en-us/aspnet/core/razor-pages/" target="_blank" rel="noopener noreferrer">Razor Pages</a></li> - <li><strong>Blazor:</strong> Build interactive client-side web UIs with C#. (Blazor Server, WebAssembly, Hybrid). <a href="https://learn.microsoft.com/en-us/aspnet/core/blazor/" target="_blank" rel="noopener noreferrer">Blazor</a></li> - <li><strong>Web APIs:</strong> Robust framework for building RESTful HTTP services.</li> + <li><strong>Minimal APIs:</strong> Lightweight syntax for creating HTTP APIs. <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis" target="_blank" rel="noopener noreferrer">Minimal APIs Docs</a></li> + <li><strong>MVC (Model-View-Controller):</strong> Pattern for building web UIs and APIs. <a href="https://learn.microsoft.com/en-us/aspnet/core/mvc/overview" target="_blank" rel="noopener noreferrer">MVC Docs</a></li> + <li><strong>Razor Pages:</strong> Page-centric model for building web UIs. <a href="https://learn.microsoft.com/en-us/aspnet/core/razor-pages/" target="_blank" rel="noopener noreferrer">Razor Pages Docs</a></li> + <li><strong>Blazor:</strong> Build interactive client-side web UIs with C#. (Server, WebAssembly, Hybrid). <a href="https://learn.microsoft.com/en-us/aspnet/core/blazor/" target="_blank" rel="noopener noreferrer">Blazor Docs</a></li> + <li><strong>Web APIs:</strong> Robust framework for building RESTful HTTP services. <a href="https://learn.microsoft.com/en-us/aspnet/core/web-api/" target="_blank" rel="noopener noreferrer">Web API Docs</a></li> </ul> <h6>Core Features</h6> - <p>Middleware pipeline, routing, dependency injection, configuration, logging, Kestrel web server.</p> + <p>Middleware pipeline, routing, dependency injection, configuration, logging, Kestrel web server. <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/kestrel" target="_blank" rel="noopener noreferrer">Kestrel Docs</a> [42]</p> </div> </div> </div> @@ -416,18 +415,137 @@ <p>Evolve Xamarin.Forms to provide a single project structure and unified API for creating native UIs across multiple platforms.</p> <h6>Key Aspects</h6> <ul> - <li><strong>Single Project:</strong> Manage code, resources, and platform-specific assets in one project.</li> + <li><strong>Single Project:</strong> Manage code, resources, and platform-specific assets in one project. <a href="https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/single-project" target="_blank" rel="noopener noreferrer">Single Project</a></li> <li><strong>Native UI:</strong> Renders native controls on each platform for authentic look and feel.</li> - <li><strong>XAML and C#:</strong> Define UI using XAML markup or C# code-behind.</li> - <li><strong>Access to Native APIs:</strong> Provides abstractions for common device features and allows direct platform API access.</li> - <li><strong>Hot Reload:</strong> See XAML and C# code changes reflected live in running app.</li> + <li><strong>XAML and C#:</strong> Define UI using XAML markup or C# code-behind. <a href="https://learn.microsoft.com/en-us/dotnet/maui/xaml/" target="_blank" rel="noopener noreferrer">XAML Docs</a></li> + <li><strong>Access to Native APIs:</strong> Provides abstractions for common device features and allows direct platform API access. <a href="https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/" target="_blank" rel="noopener noreferrer">Native APIs</a></li> + <li><strong>Hot Reload:</strong> See XAML and C# code changes reflected live in running app. <a href="https://learn.microsoft.com/en-us/dotnet/maui/xaml/hot-reload" target="_blank" rel="noopener noreferrer">Hot Reload</a></li> </ul> <h6>Targets</h6> <p>iOS, Android, Windows (WinUI 3), macOS (via Mac Catalyst).</p> </div> </div> </div> - <!-- Add more cards for WPF, WinForms, Console, Worker Services, Cloud Native here --> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-crossplatform" id="card-wpf"> + <div class="card-body"> + <h5><i class="bi bi-window-desktop"></i> WPF</h5> + <div class="card-content-wrapper"> + <p class="summary"><span class="term">Windows Presentation Foundation</span>. A UI framework for creating desktop client applications on Windows with rich user interfaces. <a href="https://learn.microsoft.com/en-us/dotnet/desktop/wpf/" target="_blank" rel="noopener noreferrer">WPF Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWpf" aria-expanded="false" aria-controls="collapseWpf"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseWpf"> + <h6>Purpose</h6> + <p>Build visually rich, interactive desktop applications for Windows.</p> + <h6>Key Aspects</h6> + <ul> + <li><strong>XAML:</strong> Declarative markup language for UI definition.</li> + <li><strong>Data Binding:</strong> Powerful mechanism for synchronizing UI and data.</li> + <li><strong>Styles and Templates:</strong> Customize appearance and behavior of controls.</li> + <li><strong>Graphics and Multimedia:</strong> Rich support for 2D/3D graphics, animation, audio, and video.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-crossplatform" id="card-winforms"> + <div class="card-body"> + <h5><i class="bi bi-app-indicator"></i> Windows Forms</h5> + <div class="card-content-wrapper"> + <p class="summary">A framework for creating Windows desktop applications with a rich set of UI controls and a visual designer. <a href="https://learn.microsoft.com/en-us/dotnet/desktop/winforms/" target="_blank" rel="noopener noreferrer">Windows Forms Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWinforms" aria-expanded="false" aria-controls="collapseWinforms"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseWinforms"> + <h6>Purpose</h6> + <p>Rapid application development (RAD) for Windows desktop applications.</p> + <h6>Key Aspects</h6> + <ul> + <li><strong>Visual Designer:</strong> Drag-and-drop interface for UI construction.</li> + <li><strong>Rich Control Set:</strong> Wide variety of pre-built UI controls.</li> + <li><strong>Event-Driven Programming:</strong> Responds to user interactions and system events.</li> + <li><strong>Mature Technology:</strong> Long history and extensive community support.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-general" id="card-console"> + <div class="card-body"> + <h5><i class="bi bi-terminal"></i> Console Applications</h5> + <div class="card-content-wrapper"> + <p class="summary">Command-line applications that run in a text-based console window, ideal for utilities and background tasks. <a href="https://learn.microsoft.com/en-us/dotnet/core/tutorials/top-level-templates" target="_blank" rel="noopener noreferrer">Console App Docs</a> [49]</p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseConsole" aria-expanded="false" aria-controls="collapseConsole"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseConsole"> + <h6>Purpose</h6> + <p>Build lightweight tools, scripts, and backend processes that don't require a graphical user interface.</p> + <h6>Key Aspects</h6> + <ul> + <li><strong>Cross-Platform:</strong> Can run on Windows, Linux, and macOS.</li> + <li><strong>Command-Line Arguments:</strong> Easily parse input parameters.</li> + <li><strong>Standard I/O:</strong> Interact via console input, output, and error streams.</li> + <li><strong>Top-level statements:</strong> Simplified syntax for `Program.cs` in modern C#.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-web" id="card-worker-services"> + <div class="card-body"> + <h5><i class="bi bi-hdd-stack"></i> Worker Services</h5> + <div class="card-content-wrapper"> + <p class="summary">Framework for creating long-running background services, message queue processors, or other non-UI tasks. <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services" target="_blank" rel="noopener noreferrer">Worker Services Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWorkerServices" aria-expanded="false" aria-controls="collapseWorkerServices"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseWorkerServices"> + <h6>Purpose</h6> + <p>Ideal for microservices, scheduled tasks, and processing data from queues or other sources without direct user interaction.</p> + <h6>Key Aspects</h6> + <ul> + <li><strong>Hosted Services (`IHostedService`):</strong> Core abstraction for background tasks.</li> + <li><strong>Generic Host:</strong> Leverages .NET's generic host for logging, configuration, DI.</li> + <li><strong>Graceful Shutdown:</strong> Supports cooperative cancellation.</li> + <li><strong>Cross-Platform:</strong> Can run as services on Windows or daemons on Linux.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-web" id="card-cloud-native"> + <div class="card-body"> + <h5><i class="bi bi-cloud-arrow-up"></i> .NET Aspire</h5> + <div class="card-content-wrapper"> + <p class="summary">An opinionated, cloud-ready stack for building observable, production-ready, distributed applications. <a href="https://learn.microsoft.com/en-us/dotnet/aspire/" target="_blank" rel="noopener noreferrer">.NET Aspire Docs</a> [4, 5, 9, 19]</p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCloudNative" aria-expanded="false" aria-controls="collapseCloudNative"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseCloudNative"> + <h6>Purpose</h6> + <p>Simplifies building and running cloud-native applications by providing tools and patterns for service discovery, telemetry, resilience, and configuration.</p> + <h6>Key Components</h6> + <ul> + <li><strong>App Host Project:</strong> Orchestrates application resources and services.</li> + <li><strong>Service Defaults:</strong> Common configurations for telemetry, resilience, etc.</li> + <li><strong>Dashboard:</strong> Local developer dashboard for observing logs, traces, and metrics.</li> + <li><strong>Components:</strong> NuGet packages for integrating with various services (e.g., Redis, PostgreSQL).</li> + </ul> + </div> + </div> + </div> </div> <!-- /.row --> </div> <!-- /.schema-container --> @@ -450,51 +568,289 @@ <div class="collapse collapse-content" id="collapseEfcore"> <h6>Key Features</h6> <ul> - <li><strong>LINQ to Entities:</strong> Query databases using Language Integrated Query.</li> - <li><strong>Migrations:</strong> Manage database schema changes over time. <a href="https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/" target="_blank" rel="noopener noreferrer">Migrations</a></li> - <li><strong>Database Providers:</strong> Supports SQL Server, SQLite, PostgreSQL, MySQL, Cosmos DB, and more. <a href="https://learn.microsoft.com/en-us/ef/core/providers/" target="_blank" rel="noopener noreferrer">Providers</a></li> - <li><strong>Change Tracking:</strong> Automatically tracks changes to entities for updates.</li> + <li><strong>LINQ to Entities:</strong> Query databases using Language Integrated Query. <a href="https://learn.microsoft.com/en-us/ef/core/querying/" target="_blank" rel="noopener noreferrer">Querying Data</a></li> + <li><strong>Migrations:</strong> Manage database schema changes over time. <a href="https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/" target="_blank" rel="noopener noreferrer">Migrations Docs</a></li> + <li><strong>Database Providers:</strong> Supports SQL Server, SQLite, PostgreSQL, MySQL, Cosmos DB, and more. <a href="https://learn.microsoft.com/en-us/ef/core/providers/" target="_blank" rel="noopener noreferrer">Providers Docs</a></li> + <li><strong>Change Tracking:</strong> Automatically tracks changes to entities for updates. <a href="https://learn.microsoft.com/en-us/ef/core/change-tracking/" target="_blank" rel="noopener noreferrer">Change Tracking Docs</a> [11, 17]</li> </ul> <h6>Use Cases</h6> <p>Simplifies data access logic in applications requiring interaction with relational or document databases.</p> </div> </div> </div> - <!-- Add more cards for Dapper, Networking, Security, Configuration, Logging, DI, Testing, LINQ, Async here --> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-data" id="card-dapper"> + <div class="card-body"> + <h5><i class="bi bi-braces-asterisk"></i> Dapper</h5> + <div class="card-content-wrapper"> + <p class="summary">A simple object mapper for .NET, focusing on performance. Often used as a "micro-ORM". <a href="https://github.com/DapperLib/Dapper" target="_blank" rel="noopener noreferrer">Dapper GitHub</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDapper" aria-expanded="false" aria-controls="collapseDapper"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseDapper"> + <h6>Key Features</h6> + <ul> + <li><strong>Performance:</strong> Extremely fast due to its minimal overhead.</li> + <li><strong>Extension Methods for IDbConnection:</strong> Easy to use with existing ADO.NET connections.</li> + <li><strong>Raw SQL:</strong> Primarily works with raw SQL queries.</li> + <li><strong>POCO Mapping:</strong> Maps query results to Plain Old CLR Objects.</li> + </ul> + <h6>Use Cases</h6> + <p>Scenarios where high performance data retrieval is critical, and developers are comfortable writing SQL.</p> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-libraries" id="card-networking"> + <div class="card-body"> + <h5><i class="bi bi-hdd-network"></i> Networking (HTTP, gRPC)</h5> + <div class="card-content-wrapper"> + <p class="summary">.NET provides rich libraries for network communication, including <span class="term">HttpClient</span> for HTTP requests and support for <span class="term">gRPC</span>. <a href="https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/overview" target="_blank" rel="noopener noreferrer">Networking Overview</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseNetworking" aria-expanded="false" aria-controls="collapseNetworking"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseNetworking"> + <h6>Key Libraries/Technologies</h6> + <ul> + <li><strong>`HttpClient` & `HttpRequestMessage`:</strong> For making HTTP requests and handling responses. <a href="https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient" target="_blank" rel="noopener noreferrer">HttpClient Docs</a></li> + <li><strong>gRPC for .NET:</strong> High-performance, cross-platform RPC framework. <a href="https://learn.microsoft.com/en-us/aspnet/core/grpc/" target="_blank" rel="noopener noreferrer">gRPC for .NET Docs</a></li> + <li><strong>`System.Net.Sockets`:</strong> Low-level socket programming. <a href="https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets" target="_blank" rel="noopener noreferrer">Sockets Docs</a></li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-libraries" id="card-security-libs"> + <div class="card-body"> + <h5><i class="bi bi-shield-lock"></i> Security Libraries</h5> + <div class="card-content-wrapper"> + <p class="summary">Built-in libraries for cryptography, authentication, authorization, and data protection. <a href="https://learn.microsoft.com/en-us/dotnet/standard/security/" target="_blank" rel="noopener noreferrer">.NET Security Docs</a> [16]</p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSecurityLibs" aria-expanded="false" aria-controls="collapseSecurityLibs"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseSecurityLibs"> + <h6>Key Areas</h6> + <ul> + <li><strong>Cryptography:</strong> Hashing, encryption, digital signatures. <a href="https://learn.microsoft.com/en-us/dotnet/standard/security/cryptography-model" target="_blank" rel="noopener noreferrer">Cryptography Model</a></li> + <li><strong>ASP.NET Core Identity:</strong> User authentication and authorization. <a href="https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity" target="_blank" rel="noopener noreferrer">ASP.NET Core Identity</a></li> + <li><strong>Data Protection APIs:</strong> For protecting data at rest. <a href="https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/introduction" target="_blank" rel="noopener noreferrer">Data Protection</a></li> + <li><strong>Secure Coding Guidelines:</strong> Practices to avoid common vulnerabilities. [1, 46]</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-libraries" id="card-configuration"> + <div class="card-body"> + <h5><i class="bi bi-gear"></i> Configuration</h5> + <div class="card-content-wrapper"> + <p class="summary">Flexible system for managing application settings from various sources (JSON, XML, environment variables, command-line). <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/configuration" target="_blank" rel="noopener noreferrer">Configuration Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseConfiguration" aria-expanded="false" aria-controls="collapseConfiguration"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseConfiguration"> + <h6>Key Features</h6> + <ul> + <li><strong>Providers:</strong> JSON, XML, INI, environment variables, command-line arguments, Azure Key Vault, etc.</li> + <li><strong>Strongly-typed Configuration (Options Pattern):</strong> Bind configuration to POCOs. <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options" target="_blank" rel="noopener noreferrer">Options Pattern</a></li> + <li><strong>Hierarchical Configuration:</strong> Values from different providers are layered.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-libraries" id="card-logging"> + <div class="card-body"> + <h5><i class="bi bi-journal-text"></i> Logging</h5> + <div class="card-content-wrapper"> + <p class="summary">Built-in logging API with providers for console, debug output, EventSource, EventLog, and third-party systems. <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/logging" target="_blank" rel="noopener noreferrer">Logging Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseLogging" aria-expanded="false" aria-controls="collapseLogging"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseLogging"> + <h6>Key Features</h6> + <ul> + <li><strong>`ILogger` Interface:</strong> Core abstraction for logging.</li> + <li><strong>Logging Providers:</strong> Console, Debug, EventSource, EventLog, ApplicationInsights, Serilog, NLog, etc.</li> + <li><strong>Log Levels:</strong> Trace, Debug, Information, Warning, Error, Critical.</li> + <li><strong>Structured Logging:</strong> Log messages with semantic content.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-libraries" id="card-di"> + <div class="card-body"> + <h5><i class="bi bi-diagram-3"></i> Dependency Injection (DI)</h5> + <div class="card-content-wrapper"> + <p class="summary">First-class support for DI, promoting loose coupling and testability. Manages object lifecycles and dependencies. <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection" target="_blank" rel="noopener noreferrer">DI Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDi" aria-expanded="false" aria-controls="collapseDi"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseDi"> + <h6>Key Concepts</h6> + <ul> + <li><strong>Service Lifetimes:</strong> Singleton, Scoped, Transient.</li> + <li><strong>Service Registration:</strong> Adding services to the `IServiceCollection`.</li> + <li><strong>Service Resolution:</strong> Injecting services via constructors or `IServiceProvider`.</li> + <li><strong>Conventions:</strong> Widely used in ASP.NET Core and other frameworks.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-libraries" id="card-testing"> + <div class="card-body"> + <h5><i class="bi bi-clipboard2-check"></i> Testing</h5> + <div class="card-content-wrapper"> + <p class="summary">Support for unit testing, integration testing, and web application testing using frameworks like MSTest, NUnit, xUnit. <a href="https://learn.microsoft.com/en-us/dotnet/core/testing/" target="_blank" rel="noopener noreferrer">.NET Testing Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTesting" aria-expanded="false" aria-controls="collapseTesting"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseTesting"> + <h6>Frameworks & Tools</h6> + <ul> + <li><strong>Unit Testing:</strong> MSTest, NUnit, xUnit.</li> + <li><strong>Integration Testing:</strong> `WebApplicationFactory` for ASP.NET Core. <a href="https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests" target="_blank" rel="noopener noreferrer">Integration Testing</a></li> + <li><strong>Mocking:</strong> Libraries like Moq, NSubstitute.</li> + <li><strong>Test Runners:</strong> `dotnet test` CLI, Visual Studio Test Explorer.</li> + </ul> + </div> + </div> + </div> </div> <!-- /.row --> </div> <!-- /.schema-container --> - <!-- IV. TOOLING & ECOSYSTEM (Example, expand similarly) --> + <!-- IV. TOOLING & ECOSYSTEM --> <div class="schema-container section-tooling" data-section-id="section-tooling-eco"> <h2 class="section-title" id="section-tooling-eco">Tooling & Ecosystem</h2> <div class="row"> <div class="col-lg-4 col-md-6"> <div class="info-card card-tooling" id="card-ides"> <div class="card-body"> - <h5><i class="bi bi-laptop"></i> IDEs</h5> + <h5><i class="bi bi-laptop"></i> IDEs & Editors</h5> <div class="card-content-wrapper"> - <p class="summary">Integrated Development Environments for .NET development. <span class="term">Visual Studio</span>, <span class="term">VS Code</span>, and <span class="term">JetBrains Rider</span> are popular choices.</p> + <p class="summary">Integrated Development Environments and code editors for .NET. <span class="term">Visual Studio</span>, <span class="term">VS Code</span>, and <span class="term">JetBrains Rider</span> are prominent. </p> <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseIdes" aria-expanded="false" aria-controls="collapseIdes"> Details <i class="bi bi-chevron-down"></i> </button> </div> </div> <div class="collapse collapse-content" id="collapseIdes"> - <h6>Popular IDEs</h6> + <h6>Popular Choices</h6> <ul> - <li><strong>Visual Studio:</strong> Full-featured IDE for Windows, also available for Mac. Extensive debugging, profiling, and project management tools. <a href="https://visualstudio.microsoft.com/" target="_blank" rel="noopener noreferrer">Visual Studio</a></li> + <li><strong>Visual Studio:</strong> Full-featured IDE for Windows, also available for Mac (with MAUI/Xamarin focus). Extensive debugging, profiling, and project management. <a href="https://visualstudio.microsoft.com/" target="_blank" rel="noopener noreferrer">Visual Studio</a></li> <li><strong>Visual Studio Code (VS Code):</strong> Lightweight, extensible code editor with excellent .NET support via C# Dev Kit and other extensions. Cross-platform. <a href="https://code.visualstudio.com/" target="_blank" rel="noopener noreferrer">VS Code</a></li> <li><strong>JetBrains Rider:</strong> Cross-platform .NET IDE known for its powerful code analysis, refactoring tools, and performance. <a href="https://www.jetbrains.com/rider/" target="_blank" rel="noopener noreferrer">Rider</a></li> </ul> </div> </div> </div> - <!-- Add .NET CLI, NuGet, Source Control, Build/CI/CD, Performance/Diagnostics cards --> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-tooling" id="card-nuget"> + <div class="card-body"> + <h5><i class="bi bi-box"></i> NuGet</h5> + <div class="card-content-wrapper"> + <p class="summary">The package manager for .NET. Allows developers to create, share, and consume reusable libraries (packages). <a href="https://learn.microsoft.com/en-us/nuget/" target="_blank" rel="noopener noreferrer">NuGet Docs</a> [44]</p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseNuget" aria-expanded="false" aria-controls="collapseNuget"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseNuget"> + <h6>Key Aspects</h6> + <ul> + <li><strong>`nuget.org`:</strong> The central public repository for NuGet packages. <a href="https://www.nuget.org/" target="_blank" rel="noopener noreferrer">nuget.org</a> [2, 6]</li> + <li><strong>Package Management:</strong> Via .NET CLI (`dotnet add package`), Visual Studio UI, or Package Manager Console. [33]</li> + <li><strong>Package Creation:</strong> Tools for packaging libraries for distribution.</li> + <li><strong>Dependency Resolution:</strong> Manages transitive dependencies.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-tooling" id="card-source-control"> + <div class="card-body"> + <h5><i class="bi bi-git"></i> Source Control</h5> + <div class="card-content-wrapper"> + <p class="summary"><span class="term">Git</span> is the de facto standard for version control. Platforms like <span class="term">GitHub</span>, <span class="term">Azure Repos</span>, and GitLab provide hosting and collaboration. <a href="https://git-scm.com/doc" target="_blank" rel="noopener noreferrer">Git Docs</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSourceControl" aria-expanded="false" aria-controls="collapseSourceControl"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseSourceControl"> + <h6>Key Platforms</h6> + <ul> + <li><strong>GitHub:</strong> Popular for open-source and private projects. <a href="https://docs.github.com/" target="_blank" rel="noopener noreferrer">GitHub Docs</a></li> + <li><strong>Azure Repos:</strong> Part of Azure DevOps, offers Git repositories. <a href="https://learn.microsoft.com/en-us/azure/devops/repos/get-started/what-is-repos" target="_blank" rel="noopener noreferrer">Azure Repos</a></li> + </ul> + <p>Effective branching strategies (e.g., GitFlow, GitHub Flow) and commit practices are crucial.</p> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-tooling" id="card-ci-cd"> + <div class="card-body"> + <h5><i class="bi bi-rocket-takeoff"></i> Build & CI/CD</h5> + <div class="card-content-wrapper"> + <p class="summary">Automated build, test, and deployment pipelines using tools like <span class="term">GitHub Actions</span>, <span class="term">Azure Pipelines</span>, Jenkins. <a href="https://learn.microsoft.com/en-us/dotnet/devops/get-started" target="_blank" rel="noopener noreferrer">.NET DevOps</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCiCd" aria-expanded="false" aria-controls="collapseCiCd"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseCiCd"> + <h6>Popular Tools</h6> + <ul> + <li><strong>GitHub Actions:</strong> Automate workflows directly within GitHub. <a href="https://docs.github.com/en/actions" target="_blank" rel="noopener noreferrer">GitHub Actions Docs</a></li> + <li><strong>Azure Pipelines:</strong> CI/CD service within Azure DevOps. <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/" target="_blank" rel="noopener noreferrer">Azure Pipelines Docs</a></li> + </ul> + <p>MSBuild is the underlying build engine for .NET projects. [3, 23]</p> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-tooling" id="card-diagnostics"> + <div class="card-body"> + <h5><i class="bi bi-activity"></i> Performance & Diagnostics</h5> + <div class="card-content-wrapper"> + <p class="summary">Tools and APIs for profiling, debugging, and monitoring .NET applications. <a href="https://learn.microsoft.com/en-us/dotnet/core/diagnostics/" target="_blank" rel="noopener noreferrer">Diagnostics Overview</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDiagnostics" aria-expanded="false" aria-controls="collapseDiagnostics"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseDiagnostics"> + <h6>Key Tools & Techniques</h6> + <ul> + <li><strong>Visual Studio Profiler:</strong> CPU usage, memory allocation, performance traces. <a href="https://learn.microsoft.com/en-us/visualstudio/profiling/" target="_blank" rel="noopener noreferrer">VS Profiler</a></li> + <li><strong>`dotnet-trace`, `dotnet-counters`, `dotnet-dump`:</strong> Cross-platform CLI diagnostic tools. <a href="https://learn.microsoft.com/en-us/dotnet/core/diagnostics/tools-overview" target="_blank" rel="noopener noreferrer">CLI Tools</a></li> + <li><strong>Debugging:</strong> Visual Studio Debugger, VS Code Debugger.</li> + <li><strong>Application Insights:</strong> APM service for monitoring live applications. <a href="https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview" target="_blank" rel="noopener noreferrer">App Insights</a></li> + </ul> + </div> + </div> + </div> </div> </div> - <!-- V. ADVANCED & ARCHITECTURAL CONCEPTS (Example, expand similarly) --> + <!-- V. ADVANCED & ARCHITECTURAL CONCEPTS --> <div class="schema-container section-advanced" data-section-id="section-advanced-concepts"> <h2 class="section-title" id="section-advanced-concepts">Advanced & Architectural Concepts</h2> <div class="row"> @@ -513,13 +869,13 @@ <h6>Benefits</h6> <ul> <li><strong>Faster Startup Time:</strong> No JIT compilation needed at runtime.</li> - <li><strong>Smaller Deployments:</strong> Can produce self-contained executables with only necessary code.</li> + <li><strong>Smaller Deployments:</strong> Can produce self-contained executables with only necessary code (trimming).</li> <li><strong>Reduced Memory Footprint:</strong> Less overhead compared to JIT-compiled applications.</li> </ul> <h6>Trade-offs & Considerations</h6> <ul> <li><strong>Longer Build Times:</strong> AOT compilation is more time-consuming.</li> - <li><strong>Reflection Limitations:</strong> Dynamic features like reflection might require workarounds or be limited. <a href="https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/trimming/prepare-libraries-for-trimming" target="_blank" rel="noopener noreferrer">Trimming/Reflection</a></li> + <li><strong>Reflection Limitations:</strong> Dynamic features like reflection might require workarounds or be limited. <a href="https://learn.microsoft.com/en-us/dotnet/core/deploying/trimming/prepare-libraries-for-trimming" target="_blank" rel="noopener noreferrer">Trimming/Reflection</a></li> <li><strong>Platform Specificity:</strong> Output is native to the target platform.</li> </ul> <h6>Use Cases</h6> @@ -527,11 +883,121 @@ </div> </div> </div> - <!-- Add Modularity, Interop, Source Generators, Observability, API Design cards --> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-advanced" id="card-modularity"> + <div class="card-body"> + <h5><i class="bi bi-puzzle"></i> Modularity & Libraries</h5> + <div class="card-content-wrapper"> + <p class="summary">Designing systems with well-defined <span class="term">class libraries</span> and understanding <span class="term">.NET Standard</span> (for older library compatibility). <a href="https://learn.microsoft.com/en-us/dotnet/standard/class-libraries" target="_blank" rel="noopener noreferrer">Class Libraries</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseModularity" aria-expanded="false" aria-controls="collapseModularity"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseModularity"> + <h6>Key Concepts</h6> + <ul> + <li><strong>Class Libraries:</strong> Package reusable code into DLLs.</li> + <li><strong>.NET Standard (Legacy):</strong> A formal specification of .NET APIs intended to be available on all .NET implementations. Useful for libraries targeting multiple .NET runtimes (e.g., .NET Framework and .NET Core). <a href="https://learn.microsoft.com/en-us/dotnet/standard/net-standard" target="_blank" rel="noopener noreferrer">.NET Standard Docs</a></li> + <li><strong>Modern .NET Targeting:</strong> For new libraries, targeting `netX.Y` (e.g., `net8.0`) is often sufficient.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-advanced" id="card-interop"> + <div class="card-body"> + <h5><i class="bi bi-link-45deg"></i> Interoperability</h5> + <div class="card-content-wrapper"> + <p class="summary">Interacting with non-.NET code, such as native C/C++ libraries (<span class="term">P/Invoke</span>) or COM components. <a href="https://learn.microsoft.com/en-us/dotnet/standard/native-interop/" target="_blank" rel="noopener noreferrer">Native Interop</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseInterop" aria-expanded="false" aria-controls="collapseInterop"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseInterop"> + <h6>Mechanisms</h6> + <ul> + <li><strong>Platform Invoke (P/Invoke):</strong> Call functions in unmanaged DLLs. <a href="https://learn.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke" target="_blank" rel="noopener noreferrer">P/Invoke Docs</a></li> + <li><strong>COM Interop:</strong> Interact with Component Object Model components. <a href="https://learn.microsoft.com/en-us/dotnet/standard/native-interop/cominterop" target="_blank" rel="noopener noreferrer">COM Interop Docs</a></li> + <li><strong>C++/CLI:</strong> For tighter integration with C++ code (Windows-specific).</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-advanced" id="card-source-generators"> + <div class="card-body"> + <h5><i class="bi bi-magic"></i> Source Generators</h5> + <div class="card-content-wrapper"> + <p class="summary">A Roslyn compiler feature that lets C# developers inspect user code and generate new C# source files during compilation. <a href="https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview" target="_blank" rel="noopener noreferrer">Source Generators Docs</a> [7, 20, 24, 29, 40, 45]</p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSourceGenerators" aria-expanded="false" aria-controls="collapseSourceGenerators"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseSourceGenerators"> + <h6>Purpose</h6> + <p>Automate boilerplate code, improve performance by avoiding runtime reflection, and enforce coding conventions.</p> + <h6>Use Cases</h6> + <ul> + <li><strong>INotifyPropertyChanged Implementation:</strong> Auto-generate property change notifications.</li> + <li><strong>Serialization Helpers:</strong> Generate optimized serialization/deserialization code (e.g., System.Text.Json).</li> + <li><strong>Builder Pattern Generation:</strong> Create fluent builder APIs.</li> + </ul> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-advanced" id="card-observability"> + <div class="card-body"> + <h5><i class="bi bi-graph-up-arrow"></i> Observability</h5> + <div class="card-content-wrapper"> + <p class="summary">Designing systems to provide insights into their behavior through <span class="term">logging, metrics, and tracing</span>. Often using <span class="term">OpenTelemetry</span>. <a href="https://learn.microsoft.com/en-us/dotnet/core/diagnostics/observability-with-otel" target="_blank" rel="noopener noreferrer">OpenTelemetry with .NET</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseObservability" aria-expanded="false" aria-controls="collapseObservability"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseObservability"> + <h6>Three Pillars of Observability</h6> + <ul> + <li><strong>Logging:</strong> Capturing discrete events and errors. (Covered in Key Libraries)</li> + <li><strong>Metrics:</strong> Aggregated numerical data about system performance (e.g., request rates, error counts). <a href="https://learn.microsoft.com/en-us/dotnet/core/diagnostics/metrics" target="_blank" rel="noopener noreferrer">.NET Metrics</a></li> + <li><strong>Distributed Tracing:</strong> Tracking requests as they flow through multiple services. <a href="https://learn.microsoft.com/en-us/dotnet/core/diagnostics/distributed-tracing" target="_blank" rel="noopener noreferrer">Distributed Tracing</a></li> + </ul> + <p>OpenTelemetry is an open-source standard for collecting and exporting telemetry data.</p> + </div> + </div> + </div> + <div class="col-lg-4 col-md-6"> + <div class="info-card card-advanced" id="card-api-design"> + <div class="card-body"> + <h5><i class="bi bi-bricks"></i> API Design</h5> + <div class="card-content-wrapper"> + <p class="summary">Principles for designing robust, maintainable, and usable APIs, especially for <span class="term">RESTful web services</span>. <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/best-practices" target="_blank" rel="noopener noreferrer">ASP.NET Core Best Practices</a></p> + <button class="btn btn-sm details-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#collapseApiDesign" aria-expanded="false" aria-controls="collapseApiDesign"> + Details <i class="bi bi-chevron-down"></i> + </button> + </div> + </div> + <div class="collapse collapse-content" id="collapseApiDesign"> + <h6>Key Considerations</h6> + <ul> + <li><strong>Consistency:</strong> Naming conventions, URL structure, request/response formats.</li> + <li><strong>Versioning:</strong> Strategies for evolving APIs without breaking clients. <a href="https://learn.microsoft.com/en-us/aspnet/core/web-api/versioning" target="_blank" rel="noopener noreferrer">API Versioning</a></li> + <li><strong>Error Handling:</strong> Clear and consistent error responses.</li> + <li><strong>Security:</strong> Authentication, authorization, input validation.</li> + <li><strong>Performance:</strong> Caching, pagination, efficient data retrieval.</li> + <li><strong>Documentation:</strong> Using tools like Swagger/OpenAPI. <a href="https://learn.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle" target="_blank" rel="noopener noreferrer">Swagger/OpenAPI</a></li> + </ul> + </div> + </div> + </div> </div> </div> - <!-- VI. KEY CONSIDERATIONS FOR ARCHITECTS (A single summary card or multiple) --> + <!-- VI. KEY CONSIDERATIONS FOR ARCHITECTS --> <div class="schema-container section-general" data-section-id="section-arch-considerations"> <h2 class="section-title" id="section-arch-considerations">Key Considerations for Architects</h2> <div class="row"> @@ -540,7 +1006,7 @@ <div class="card-body"> <h5 class="text-center"><i class="bi bi-building-gear"></i> Architectural Decision Points</h5> <div class="card-content-wrapper"> - <p class="summary text-center">When designing .NET systems, architects must weigh <span class="term">scalability</span> (horizontal/vertical), <span class="term">resilience</span>, <span class="term">security</span>, <span class="term">maintainability</span>, <span class="term">deployment strategies</span> (containers, serverless, PaaS), and <span class="term">cost optimization</span>. Choosing the right application models and libraries is crucial for success.</p> + <p class="summary text-center">When designing .NET systems, architects must weigh <span class="term">scalability</span>, <span class="term">resilience</span>, <span class="term">security</span>, <span class="term">maintainability</span>, <span class="term">deployment strategies</span>, and <span class="term">cost optimization</span>. Choosing the right application models and libraries is crucial. <a href="https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/" target="_blank" rel="noopener noreferrer">.NET Architecture Guides</a></p> <button class="btn btn-sm details-toggle mx-auto" type="button" data-bs-toggle="collapse" data-bs-target="#collapseArchConsiderations" aria-expanded="false" aria-controls="collapseArchConsiderations"> Explore Further <i class="bi bi-chevron-down"></i> </button> @@ -549,13 +1015,13 @@ <div class="collapse collapse-content" id="collapseArchConsiderations"> <h6>Core Tenets</h6> <ul> - <li><strong>Scalability:</strong> Design for growth. Will the system scale out (more instances) or scale up (more powerful instances)? How will data be partitioned or sharded if needed?</li> - <li><strong>Resilience & Fault Tolerance:</strong> Implement patterns like retries, circuit breakers (e.g., using <a href="https://github.com/App-vNext/Polly" target="_blank" rel="noopener noreferrer">Polly</a>), and health checks. Design for failure.</li> - <li><strong>Security by Design:</strong> Incorporate security throughout the development lifecycle (authentication, authorization, data protection, secure coding practices). <a href="https://learn.microsoft.com/en-us/aspnet/core/security/" target="_blank" rel="noopener noreferrer">ASP.NET Core Security</a></li> - <li><strong>Maintainability & Testability:</strong> Write clean, modular code. Employ DI, unit tests, and integration tests. <a href="https://learn.microsoft.com/en-us/dotnet/core/testing/" target="_blank" rel="noopener noreferrer">.NET Testing</a></li> - <li><strong>Deployment Strategies:</strong> Consider containers (Docker, Kubernetes), serverless (Azure Functions, AWS Lambda), Platform-as-a-Service (Azure App Service).</li> - <li><strong>Cost Optimization:</strong> Monitor resource usage, choose appropriate cloud service tiers, and optimize for efficiency.</li> - <li><strong>Observability:</strong> Implement robust logging, metrics, and tracing (e.g., using OpenTelemetry). <a href="https://learn.microsoft.com/en-us/dotnet/core/diagnostics/observability-with-otel" target="_blank" rel="noopener noreferrer">OpenTelemetry with .NET</a></li> + <li><strong>Scalability:</strong> Design for growth. Consider patterns like microservices, load balancing, and caching. <a href="https://learn.microsoft.com/en-us/dotnet/architecture/microservices/" target="_blank" rel="noopener noreferrer">Microservices Architecture</a></li> + <li><strong>Resilience & Fault Tolerance:</strong> Implement patterns like retries, circuit breakers (e.g., using <a href="https://github.com/App-vNext/Polly" target="_blank" rel="noopener noreferrer">Polly</a>), and health checks. <a href="https://learn.microsoft.com/en-us/dotnet/architecture/cloud-native/resilient-applications" target="_blank" rel="noopener noreferrer">Resilient Apps</a></li> + <li><strong>Security by Design:</strong> Incorporate security throughout the lifecycle. <a href="https://learn.microsoft.com/en-us/aspnet/core/security/" target="_blank" rel="noopener noreferrer">ASP.NET Core Security</a> [1, 46]</li> + <li><strong>Maintainability & Testability:</strong> Clean, modular code. Employ DI, unit/integration tests. <a href="https://learn.microsoft.com/en-us/dotnet/core/testing/" target="_blank" rel="noopener noreferrer">.NET Testing</a></li> + <li><strong>Deployment Strategies:</strong> Containers (Docker, Kubernetes), serverless (Azure Functions), PaaS (Azure App Service). <a href="https://learn.microsoft.com/en-us/dotnet/architecture/host-deploy/" target="_blank" rel="noopener noreferrer">Hosting & Deployment</a></li> + <li><strong>Cost Optimization:</strong> Monitor resource usage, choose appropriate service tiers, and optimize for efficiency.</li> + <li><strong>Observability:</strong> Implement robust logging, metrics, and tracing. (Covered in Advanced Concepts)</li> </ul> <p>The choice of .NET frameworks and libraries should align with these architectural goals and the specific requirements of the project.</p> </div> @@ -567,19 +1033,21 @@ </div> <!-- /container --> <footer class="container text-center pb-3"> - <p class="mb-2">© <span id="currentYear"></span> Your Name/Company Here</p> + <p class="mb-2">© <span id="currentYear"></span> <!-- Consider updating: Your Name/Company Here --> .NET Cheatsheet Contributor</p> <div> <a href="https://learn.microsoft.com/en-us/dotnet/" title=".NET Documentation" target="_blank" rel="noopener noreferrer" class="mx-2 link-secondary"> <i class="bi bi-book"></i> .NET Docs </a> - <!-- Add other relevant links --> + <a href="https://dotnet.microsoft.com/en-us/learn/architecture" title=".NET Architecture Center" target="_blank" rel="noopener noreferrer" class="mx-2 link-secondary"> + <i class="bi bi-diagram-2"></i> .NET Architecture Center + </a> </div> <div> <a href="https://www.linkedin.com/in/davidveksler/" title="David Veksler on LinkedIn" target="_blank" rel="noopener noreferrer" class="mx-2 link-secondary"> <i class="bi bi-linkedin"></i> LinkedIn </a> - <a href="https://cheatsheets.davidveksler.com/" title="Browse All Cheatsheets" class="mx-2 link-secondary"> + <a href="http://cheatsheets.davidveksler.com/" title="Browse All Cheatsheets" class="mx-2 link-secondary"> <i class="bi bi-collection"></i> All Cheatsheets </a> </div>