Resources  
  • SQL Server CLR Integration: Development, Deployment, Security, Architecture, Patterns, and Real-World Use CasesAug 11, 2025. Explore SQL Server CLR Integration’s power to bridge .NET and relational databases. Learn best practices, security, and real-world use cases to build scalable, secure, high-performance data-driven applications across diverse industries.
  • Best Practice to Make Your Project Cleaner in .NETAug 09, 2025. Discover the best practices to keep your .NET projects clean, maintainable, and efficient. Learn tips for organizing code, improving readability, and boosting performance.
  • GenAI Explained: How Does It Actually Work? - Part 2Aug 08, 2025. Generative AI creates text, images, audio, and more by learning patterns from vast data. It powers tools like ChatGPT, DALL·E, and Midjourney, transforming creativity, productivity, and problem-solving across industries.
  • Unlocking the Power of Software Design PatternsAug 08, 2025. Explore how software design patterns offer proven, reusable solutions to common development challenges. Learn their types, benefits, and real-world applications to build scalable, maintainable, and efficient software systems.
  • ETL Design Pattern to Implement SCD Type 2 Using SQL, SSIS, or dbtJul 30, 2025. SCD Type 2 is widely used in data warehousing to preserve full history of dimensional changes. Implementing it correctly through your ETL process is crucial for accurate historical reporting.
  • Designing a Scalable Schema in MongoDB: Real-World Patterns That Actually WorkJul 21, 2025. MongoDB gives you freedom, but that freedom comes with tradeoffs. Schema design in MongoDB isn’t about a strict structure. It’s about smart structure, based on how your app behaves.
  • Modern MediatR Library in .NET Core 9.0Jul 10, 2025. Modern MediatR Library in .NET Core
  • 🍁Mastering SOLID Principles in Real-World .NET ProjectsJul 07, 2025. Learn SOLID principles in C# with real-world .NET examples. Master SRP, OCP, LSP, ISP, and DIP to write clean, testable, and scalable code using interfaces, patterns, and best practices for enterprise apps.
  • Webhook pattern for an Azure Logic AppJul 01, 2025. This article describes how we can use asynchronous request reply pattern, webhook pattern with logic app to resolve timeout related issues during large data processing.
  • Key Performance Tuning Techniques in Android Development (2025)Jul 01, 2025. Optimize Android app performance with innovative UI, memory management, threading, and modern tools like Jetpack Compose, Retrofit, Room, and Firebase to ensure smooth, fast, and reliable user experiences.
  • Page Object Model Design Pattern: Benefits and ImplementationJun 30, 2025. The Page Object Model (POM) design pattern in Selenium improves test automation by separating UI structure from test logic, ensuring maintainability, reusability, readability, and scalability for growing web applications.
  • What is Singleton Design Pattern With Real Time Example in C#Jun 12, 2025. Learn how the Singleton Design Pattern works in C# with a real-time example. Understand its use in controlling object creation, ensuring only one instance exists for global access and efficiency.
  • Mastering the Factory Pattern in C# 13: Best Practices with Real-World ExamplesJun 08, 2025. With this best practices guide by Ziggy Rafiq, you will learn Factory Pattern in C# 13 with clean architecture, DI, and testable design.
  • MVVM with Clean Architecture in Android DevelopmentJun 04, 2025. MVVM with Clean Architecture in Android Development refers to a structured approach that separates concerns in an Android app to improve scalability, testability, and maintainability.
  • Building a Clean ASP.NET Core API with C# 13, EF Core, and DDDJun 02, 2025. The guide is written by Ziggy Rafiq and follows real-world architecture and testing best practices to provide a clean, scalable REST API using ASP.NET Core, C# 13, EF Core, and MS SQL.
  • Coil - Image Loading LibraryMay 26, 2025. Coil is a fast, lightweight, and modern image-loading library for Android, built using Kotlin and backed by Coroutines. It simplifies image loading with efficient caching and minimal setup.
  • Event-Driven CQRS with C# 14 and the SQL Outbox PatternMay 15, 2025. Learn how to implement a reliable event-driven CQRS microservice using the SQL Outbox Pattern with C# 14. Ensure strong consistency, transactional event publishing, and fail-safe asynchronous processing for scalable distributed systems.
  • Applying the Saga Pattern for Distributed Transactions Across Services Using C# ExamplesMay 07, 2025. The Saga pattern in microservices helps manage distributed transactions by breaking them into local transactions with compensating actions. It ensures data consistency and handles failures through choreography or orchestration.
  • Build a CRUD App in .NET 8 MVC Using Dapper and Repository PatternMay 06, 2025. Learn to build a CRUD app in .NET 8 MVC using Dapper for lightweight data access and the Repository Pattern for clean code architecture.
  • Abstract Factory Pattern for Notification Services in C# 14Apr 22, 2025. Discover how to use the Abstract Factory Pattern in C# 14 to build a flexible, provider-agnostic notification system.
  • Search and Removal of Item from Local List in MAUI [GamesCatalog] 16Apr 22, 2025. We aim to create a mobile app and its backend using C# and .NET. We will use the IGDB game review API: https://api-docs.igdb.com/#examples. With it, we can build a mobile game catalog app and store our reviews.
  • Singleton Pattern in C# 14: A Deep Dive with a Real-World ExampleApr 21, 2025. In software architecture, there are scenarios where only a single instance of a class should exist throughout the lifetime of an application.
  • 🎨 Abstract Factory Pattern in C# 14Apr 21, 2025. In modern C# development, particularly within enterprise applications, it’s common to deal with families of related objects.
  • Abstract Factory Pattern for Database Access in C# 14Apr 21, 2025. This article covers creating flexible, maintainable code for handling multiple databases, while leveraging modern C# features for clean architecture and scalability.
  • Listing Information from the Local DB in MAUI .NET 9 [GamesCatalog] - Part 15Apr 20, 2025. Learn how to list and display information from a local database in a .NET 9 MAUI application! In Part 15 of the GamesCatalog series, we’ll explore data binding, fetching records, and displaying game data seamlessly in your MAUI app. Perfect for beginners and intermediate developers!
  • Horizontal List of Overlapping Images in MAUI [GamesCatalog] - Part 14Apr 20, 2025. Learn how to create a horizontal list of overlapping images in .NET MAUI for your GamesCatalog app! In Part 14 of this series, we’ll explore step-by-step how to design a smooth, modern UI using CollectionView and custom layouts. Perfect for game apps and cross-platform projects!
  • What is New in JDK 24?Apr 18, 2025. JDK 24 introduces preview features like unnamed variables, pattern matching for primitives, string templates, and performance boosts, enhancing Java's productivity, readability, and native integration for modern development.
  • Advanced Configuration in .NET CoreApr 17, 2025. .NET Core provides various configuration sources like appsettings.json, environment variables, and Azure Key Vault. You can use strongly typed configuration with IOptions, validate options, enable hot reload, and manage secrets securely for app development.
  • C# Singleton Pattern: One Instance to Rule Them AllApr 16, 2025. The Singleton Design Pattern in C# ensures only one instance of a class exists and provides a global access point. It's ideal for managing shared resources like logging, configuration, or database connections.
  • Introduction to Event Driven Architecture [EDA]Apr 15, 2025. Event-driven architecture (EDA) is a software design pattern where decoupled components communicate via events. It enables real-time, scalable, and flexible systems, commonly used in microservices, IoT, payment processing, and real-time analytics.
  • Django Web framework Google Chart ExampleApr 14, 2025. Django, a Python web framework using the MVT pattern, simplifies web development with built-in admin, structured views, and templates—demonstrated using a Google Charts example for dynamic data visualization.
  • Asynchronously Grouping Totals in MAUI [GamesCatalog] - Part 13Apr 14, 2025. Learn how to implement dynamic game status cards in MAUI using MVVM, data binding, and async methods. This covers creating UI components, grouping data by game status, and displaying totals on the main screen.
  • Dynamic Styles and Appearance Behavior in MAUI [GamesCatalog] - Part 12Apr 11, 2025. This XAML defines a styled "Add Game" button using FontAwesome icons. It binds commands and enables triggers to change text and icon color dynamically based on the button's enabled state.
  • .NET 8 - System.Linq.Dynamic.Core – using SQL LIKEApr 11, 2025. System.Linq.Dynamic.Core library does not support SQL LIKE, and I added support for it. Added SQL LIKE support to the System.Linq.Dynamic.Core in .NET 8 using a custom patch. Enables dynamic SQL pattern matching in EF8 projects where built-in LIKE functionality was missing.
  • Open/Closed Principle (OCP)Apr 08, 2025. The Open/Closed Principle encourages extending software functionality without modifying existing code. It enhances flexibility, reduces bugs, and promotes maintainability by using interfaces and polymorphism for scalable, change-resilient design.
  • Liskov Substitution Principle (LSP)Apr 07, 2025. Understand the Liskov Substitution Principle (LSP), a key SOLID principle that ensures subclasses can replace base classes without errors, promoting reliable inheritance, clean abstraction, and maintainable object-oriented design.
  • Mastering SOLID Principles in Software DesignApr 06, 2025. The SOLID principles are five key object-oriented design guidelines—Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion—aimed at writing clean, maintainable, and scalable software systems.
  • Understanding AI: A Beginner's GuideApr 04, 2025. Artificial Intelligence (AI) simulates human intelligence in machines to perform tasks like pattern recognition, decision-making, and learning from data. It powers apps like recommendations, predictions, and automation.
  • Updating an Object in the Local Database in MAUI .NET 9 [GamesCatalog] - Part 11Apr 03, 2025. Learn how to retrieve and update game statuses in a local database using MAUI .NET 9. Implement async functions in GameRepo and GameService, manage game status, and enhance UI interactions efficiently.
  • Adding Objects to a Local Database in MAUI .NET 9 [GamesCatalog] - Part 10Apr 02, 2025. Learn how to store game reviews in a local SQLite database using MAUI .NET 9. This guide covers setting up repositories, handling images, adding games, and implementing dependency injection for seamless functionality.
  • What is Monolithic ArchitectureApr 01, 2025. Monolithic architecture is a software design pattern where the entire application is built as a single unit. It offers advantages like easier development and deployment but faces challenges in scalability and maintenance as applications grow.
  • Decorator Design Pattern ( Singleton Design Pattern)Mar 28, 2025. This article explains the Decorator Design Pattern in C#, demonstrating how to dynamically add functionalities to objects without modifying their structure. It includes real-world examples, implementation steps, and code samples.
  • Advanced APIs with ASP.NET Core: Middleware, EF Core, and VersioningMar 28, 2025. Learn how to build advanced APIs with ASP.NET Core using middleware, Entity Framework Core (EF Core), and API versioning. This guide covers request handling, database management with EF Core, and implementing versioning strategies for scalable and maintainable APIs.
  • Using Icon Fonts in MAUI .NET 9 [GamesCatalog] - Part 7Mar 18, 2025. Learn how to integrate FontAwesome icons and manage game status selection in a MAUI MVVM .NET 9 application. This guide covers adding custom fonts, binding commands, and styling buttons dynamically to reflect game progress.
  • Learn C#: Refactor CodeMar 18, 2025. Refactoring in C# enhances code readability, maintainability, and performance by eliminating redundancy, utilizing LINQ, extracting methods, applying null-coalescing operators, and implementing async/await patterns.
  • Dynamic Database Web API in .NET 9: Clean Architecture & MediatR for FlexibilityMar 17, 2025. A Web API should support multiple database options such as SQL Server, PostgreSQL, MySQL, and SQLite without major code changes. In this article, we will build a .NET 9 Web API using Clean Architecture, Domain-Driven Design (DDD), and MediatR, while implementing dynamic database selection using Entity Framework Core (EF Core).
  • Understanding IT Solution ArchitectureMar 12, 2025. Solution architecture is focused mainly on the understanding of the business requirements and based on that need to design the project. Solutions should be designed in a way that it will be easy for maintenance and updates.
  • Passing an Object from a List to Another Page in MAUI MVVM .NET 9 [GamesCatalog] - Part 6Mar 10, 2025. This article covers object passing techniques using navigation, data binding, and command binding in the GamesCatalog app. Enhance your cross-platform development skills with structured MVVM patterns for seamless data transfer.
  • Infinite Scroll and Loading Indicator in ListView in MAUI MVVM .NET 9 [GamesCatalog] - Part 5Mar 06, 2025. This article covers lazy loading, async data fetching, and UI optimization for a seamless user experience in GamesCatalog. Enhance performance with smooth scrolling and dynamic data updates.
  • Consuming an API and Populating a List with the Results in MAUI MVVM .NET 9 [GamesCatalog] - Part 4Mar 03, 2025. Learn how to consume an API and populate a list with the results in a .NET 9 MAUI MVVM app. In this part of the GamesCatalog series, you'll fetch data from an API, bind it to a list, and implement best practices for handling API responses efficiently.
  • Domain Events & Pub/Sub Pattern: Manual Implementation vs MediatRFeb 27, 2025. Domain events and the publish/subscribe pattern are essential for building decoupled, scalable, and maintainable systems. Whether we're working on a microservices architecture or a modular monolith, these patterns help us manage complexity and enforce boundaries between components.
  • Reusable Components and Styles in MAUI MVVM .NET 9 [GamesCatalog] - Part 3Feb 24, 2025. In this third part of the GamesCatalog series, we explore how to create reusable components and styles in MAUI MVVM using .NET 9.
  • Creating a ListView MAUI MVVM .NET 9 [GamesCatalog] - Part 2Feb 14, 2025. Create a MAUI .NET 9 project that displays game information using a ListView. Bind a ViewModel with an ObservableCollection of UIIGDBGame items, and design a clean UI using XAML, Grid, and custom styling for a game catalog.
  • Understanding Bridge Design PatternFeb 13, 2025. This article explains its benefits, use cases, and implementation in C# with a real-world message-sending example using SmsMessageSender and EmailMessageSender.
  • Understanding Factory Design Pattern Feb 11, 2025. Learn about the Factory Design Pattern in C#. This article explains its implementation with a real-world banking example, demonstrating how to create flexible, maintainable, and decoupled object creation logic.
  • CQRS and Mediator Pattern in a .NET 8 Web APIFeb 10, 2025. This article explains how to implement CQRS and Mediator patterns in a .NET 8 Web API. It covers the benefits of separating read and write operations with CQRS, and how the Mediator pattern reduces dependencies between objects.
  • Understanding Abstract Factory Design PatternFeb 01, 2025. This article explains the Abstract Factory Design Pattern in C#, demonstrating its implementation with a real-world payment gateway example. It covers abstract products, factories, concrete implementations, and client usage.
  • Design Patterns for Scalable ASP.NET MVC ApplicationsJan 31, 2025. Discover key design patterns like Repository, Unit of Work, Dependency Injection, Factory, Singleton, and Command to enhance the scalability, maintainability, and testability of your ASP.NET MVC applications.
  • Mastering C# 13.0: Best Practices and Coding StandardsJan 26, 2025. Explore the essential coding standards and new features of C# 13.0. Enhance your development skills with practical examples and coding snippets for writing clean, efficient, and maintainable code.
  • Build Cross-Platform Apps with .NET MAUI Blazor HybridJan 21, 2025. There is a way to combine the capabilities of .NET MAUI and Blazor to create applications with a single codebase that works on mobile, desktop, and web platforms. In this article, I will demonstrate how to achieve this.
  • Java 21 JUnit Testing Best PracticesJan 21, 2025. The best practices for JUnit testing in Java 21 by Ziggy Rafiq include leveraging new language features like record patterns and string templates. Develop maintainable and robust Java applications by leveraging test isolation, AAA patterns, and parameterized tests.
  • Java Program to Generate Pascal's TriangleJan 20, 2025. A Java Program to Generate Pascal's Triangle creates a pattern of numbers where each number is the sum of the two numbers directly above it. The program allows the user to input the number of rows they want for the triangle.
  • What We Didn't Know About C# 13Jan 13, 2025. Ziggy Rafiq shows us how to leverage C# 13's hidden gems, including advanced pattern matching and performance enhancements that allow for faster and more effective development.
  • Printing Different Types of Star Patterns in Java with CodeJan 09, 2025. Star pattern programs in Java demonstrate the use of nested loops and control structures, creating shapes like squares, pyramids, diamonds, and hollow squares with illustrative code examples and outputs.
  • What is Factory Method Design Pattern?Jan 06, 2025. Learn how to build an AI-powered birthday party planner using Copilot Studio and Microsoft OpenAI. Streamline theme selection, product management, and logistics with intelligent automation for efficient and creative event planning.
  • Why We need Factory Design Pattern?Dec 31, 2024. The Factory Design Pattern is a creational design approach that simplifies object creation by providing a central mechanism. It promotes code reusability, maintainability, and decoupling, making software development efficient and scalable.
  • Advanced Logging with Proxies in C#Dec 24, 2024. This article presents a lightweight, dependency-free logging mechanism in C# using the DispatchProxy class. It enables efficient method interception, conditional logging, performance optimization, and error handling without external dependencies.
  • Implement the Mediator Pattern in a .NET Web APIDec 17, 2024. Learn how to implement the Mediator Pattern in a .NET Web API using the MediatR library. This design pattern reduces tight coupling between components by centralizing communication through a mediator.
  • Transactional Outbox PatternDec 07, 2024. The Transactional Outbox Pattern ensures data consistency in distributed systems by storing events in an outbox table within the database. It simplifies reliable messaging, enabling seamless communication between microservices while avoiding the complexity of two-phase commits.
  • Factory Design Pattern Using Delegates In C#Nov 27, 2024. Factory Pattern is a creational design pattern that provides a way to encapsulate object creation. Instead of directly instantiating objects, you delegate the creation process to a factory class.
  • Dependency Injection (DI) in .NET CoreNov 27, 2024. In this article, we will learn how to configure services, implement constructor injection, and understand DI lifetimes (scoped, transient, singleton) for efficient application design.
  • Options Pattern In ASP.NET CoreNov 25, 2024. The Options pattern in ASP.NET Core simplifies configuration management with strongly-typed settings. Using classes aligned to appsettings.json, it ensures type safety, dependency injection, and validation.
  • Advanced C# 13 and .NET 9 Features for Expert .NET EngineersNov 22, 2024. With this guide, you will learn about enhanced pattern matching, static abstract members, Native AOT, and much more in C# 13 and .NET 9. Written by Ziggy Rafiq, this is the best resource for experienced .NET Software Engineer Leads.
  • The Cynefin framework with Domain-driven DesignNov 21, 2024. What is the Cynefin Framework, and how does it align with Domain-Driven Design (DDD)? The Cynefin framework helps decision-makers navigate complex problems by categorizing them into five domains. It complements Domain-driven Design (DDD) by addressing complexity.
  • Use of ItemsControl in WPF C# for Flexible UI DesignNov 19, 2024. This guide explores data binding, templates, and customization techniques for crafting sophisticated layouts. Enhance your WPF skills and unlock the full potential of ItemsControl for efficient UI development.
  • Accordion PatternNov 19, 2024. This article will discuss Accordion Pattern.
  • Repository Pattern in .NET Core for Clean Data AccessNov 15, 2024. Learn how to separate business logic from data logic, enhance testability, and reduce code duplication. By following these best practices, you’ll achieve modular, scalable applications in .NET Core.
  • Code Reviews to Eliminate Common Anti-PatternsNov 07, 2024. Enhancing software quality by avoiding antipatterns in code reviews that cover antipatterns in the Input Kludge, Magic Pushbutton, Encapsulation Violation, Anemic Domain Model, and how to create a rich domain model.
  • Data Loss Prevention in Microsoft Fabric InternalsOct 28, 2024. Microsoft Fabric’s Data Loss Prevention (DLP) feature protects sensitive data across services like SharePoint, Teams, and Exchange by enabling policy creation, scanning, and enforcement through Microsoft Purview.
  • An Overview of the Implementation of ValidationRules in WPF C#Oct 27, 2024. In WPF, the ValidationRule class enables custom validation for user input in controls like TextBox. By extending the ValidationRule and overriding the Validate method, specific input criteria can be enforced.
  • Dependency Properties in WPF: Benefits, Usage, and Examples in C#Oct 21, 2024. A Dependency Property in WPF is a specialized property supported by the WPF property system. It enables data binding, styling, animation, and value inheritance. This system improves memory efficiency and provides automatic change notifications, making it essential for dynamic, data-driven applications.
  • An in-depth Look at Advanced Pattern Matching in C# 12Oct 21, 2024. With Ziggy Rafiq, learn how to leverage advanced pattern matching features in C# 12, including the new let pattern and enhanced recursive patterns.
  • Why In ASP.NET Core logging is often implemented as a singletonOct 20, 2024. In ASP.NET Core, logging is often implemented as a singleton to ensure efficient resource usage, centralized management, and thread-safe logging across the application.
  • Pattern Matching for Switch in Java 17Oct 07, 2024. Pattern matching for switches in Java 17 enhances code readability and simplifies working with complex data structures. It allows you to match object types, use type patterns, and add conditions with guarded patterns.
  • REPR Pattern - For C# DevelopersSep 27, 2024. Discover the REPR Pattern, a powerful design technique tailored for C# developers. Learn how this pattern can simplify code structure, improve maintainability, and optimize performance in C# applications.
  • Chain of Resposability PatternSep 24, 2024. The Chain of Responsibility is a behavioral design pattern that enables passing requests along a series of handlers. Each handler decides to process the request or forward it to the next in line. This pattern allows for flexible request processing and decouples sender and receiver.
  • Using C# 12 with Clean Code PracticesSep 21, 2024. Learn how to write cleaner, more maintainable code with C# 12 features such as primary constructors and improved pattern matching. This article explores practical examples and tips for applying clean code practices with C# 12.
  • Prototype Pattern: Cloning Objects in C#Sep 18, 2024. The Prototype Pattern is a creational design pattern that simplifies object creation by cloning existing instances instead of starting from scratch. Ideal for complex objects, it reduces initialization overhead and ensures consistency.
  • Builder Pattern: Constructing Complex ObjectsSep 14, 2024. In this article, we learn about Builder Pattern: Constructing Complex Objects. The Builder Pattern simplifies the creation of complex objects through step-by-step construction. It enables flexibility, modularity, and clarity in assembling products, making it ideal for various configurations and customizations.
  • Detailed use of Action Delegate in C#Sep 11, 2024. In C#, the Action delegate represents a method that does not return a value and can accept up to 16 parameters. It's useful for passing methods as arguments, callbacks, and event handling. It supports lambda expressions and anonymous methods, making code more concise. Unlike Func<T>, Action always returns void.
  • Singleton Pattern: Ensuring a Single Instance in .NET CoreSep 09, 2024. In this article, we learn about Singleton Pattern: Ensuring a Single Instance in .NET Core. The Singleton Pattern ensures a class has only one instance, providing global access. It's commonly used for managing shared resources like logging, configurations, or database connections, ensuring efficient resource usage.
  • Abstract Factory Pattern: Designing Families of Related Objects in C#Sep 09, 2024. The Abstract Factory Pattern provides an interface for creating families of related objects without specifying their concrete classes. It ensures consistency and flexibility in object creation, useful in scenarios like UI design, configuration systems, and data access layers, promoting modular and decoupled design.
  • Factory Method Pattern: Simplifying Object Creation in C#Sep 06, 2024. The Factory Method Pattern is a creational design pattern that delegates object creation to subclasses, promoting flexibility and maintainability. It defines an interface for creating objects but lets subclasses decide which class to instantiate. This approach reduces coupling and enhances scalability in complex systems.
  • What Are Design Patterns? Understanding the BasicsSep 05, 2024. Design patterns are essential in software development, offering reusable solutions to common problems. By applying patterns like Singleton, Factory Method, and Observer, developers create flexible, maintainable, and scalable code.
  • The Importance of Design Patterns in .NET Core DevelopmentSep 05, 2024. This article discusses the importance of design patterns in .NET Core development, highlighting how they enhance scalability, maintainability, and flexibility. Key patterns include Singleton, Repository, Factory Method, and Strategy, improving code quality and communication.
  • Categorizing Design Patterns: Creational, Structural & BehavioralSep 05, 2024. In this article we will learn about Categorizing Design Patterns: Creational, Structural, and Behavioral. It provides real-life examples, benefits, and challenges, offering developers insights for better software architecture.
  • Design Pattern (3), SingletonSep 05, 2024. This article will discuss the Singleton pattern.
  • A Guide to Using the Decorator Pattern in Your C# CodeSep 04, 2024. In this article, we will learn how to implement this pattern in your C# code, improve code reusability, and follow best practices for more maintainable and flexible software design.
  • Understanding State Design PatternSep 02, 2024. This pattern is particularly useful for implementing state machines or managing complex state-dependent logic, as it promotes cleaner code and improves maintainability in software development.
  • Using Factory Patterns in C# 12 to simplify A/B testingAug 30, 2024. Find out how Ziggy Rafiq simplifies A/B testing with feature toggles in C# 12 by using Factory and Abstract Factory design patterns.