Facade Pattern: Simplifying Complex Financial Systems in C#

The Facade pattern is a structural design pattern that provides a simplified interface to a complex subsystem. It hides the intricacies of the underlying system and presents a unified interface to clients. In this article, we’ll explore the Facade pattern in C# and demonstrate its practical ap…

Read More
The Adapter Pattern: Bridging Incompatible Interfaces

We often encounter situations where we need to use classes or interfaces that don’t quite fit our current system. This is where the Adapter Pattern comes into play. The Adapter Pattern allows us to make incompatible interfaces compatible without modifying their source code. What is the Adapter…

Read More
Chain of Responsibility concrete example

The Chain of Responsibility (CoR) design pattern is a behavioral pattern that allows an object to pass the request along a chain of potential handlers until an object handles the request. This pattern decouples the sender of a request from its receiver by giving multiple objects a chance to handle t…

Read More
Template Method Pattern Concrete example

The Template Method pattern is a cornerstone of Object-Oriented Programming (OOP), embodying the essence of inheritance and polymorphism. It encapsulates a general algorithm within a base class, providing a blueprint for subclasses to follow. This pattern promotes code reusability and consistency, e…

Read More
Mediator pattern concrete example

Design patterns serve as blueprints for solving recurring problems in software development, and among them, the Mediator Design Pattern shines in facilitating communication between disparate components. By promoting loose coupling and centralized control, the Mediator pattern streamlines complex sys…

Read More
Overview of NDepend the In-Depth .NET Code Quality Analysis tools

As a seasoned .NET developer, I’m always on the lookout for tools that can elevate the quality and maintainability of my code. Recently, I had the chance to explore NDepend, a robust static analysis tool tailored for .NET applications. In this guide, I’ll walk you through an overview of …

Read More
Observer Pattern with concrete example

Understanding the Observer Pattern The Observer Pattern is a behavioral design pattern that defines a one-to-many dependency between objects. In simpler terms, when one object (the subject) changes its state, all its dependents (observers) are notified and updated automatically. This pattern promote…

Read More
Strategy Pattern E-Commerce discount Concrete example
Strategy Pattern with concrete example

The Strategy Pattern involves defining a family of algorithms, encapsulating each of them, and making them interchangeable. This enables the client to choose a specific algorithm at runtime. Let's delve into the implementation.

Read More
State Design Pattern with concrete example

An article previously written in french for Programisto : here Design patterns are frequently used methods in software development. They allow for optimizing, clarifying, and, most importantly, making the computer code more robust. State Pattern A design pattern provides a solution to a frequently e…

Read More
Applying the Command Pattern in C#: A UserService CRUD Transformation

The Command Pattern is a behavioural design pattern that encapsulates a request as an object, allowing for parameterization of clients with queues, requests, and operations. In this article, we’ll explore how to apply the Command Pattern in a classic CRUD (Create, Read, Update, Delete) scenari…

Read More
Demystifying Extension Methods in C#

When it comes to enhancing the functionality of existing types in C#, extension methods shine as a powerful tool in a developer’s arsenal. This article delves into the world of extension methods, exploring what they are, how they work, and why they are a valuable addition to your coding toolki…

Read More
Navigating the Seas of Event-Driven Architecture: Understanding Eventual Consistency, Availability Over Consistency, and More

In the realm of distributed systems and Event-Driven Architecture (EDA), certain principles and trade-offs play a pivotal role in shaping the design and behavior of applications. In this article, we’ll set sail on the seas of EDA, exploring concepts such as eventual consistency, prioritizing a…

Read More
Understanding Event Sourcing: Concepts, Advantages, and Implementation.

Events are stored into an append-only log. This keeps an audit of everything that happened. Write events to log discouraged to delete/update any past ones.

Read More
Semaphore : Limit execution of a block of code to a set of threads

In computing, a 𝘀𝗲𝗺𝗮𝗽𝗵𝗼𝗿𝗲 is a synchronization primitive that allows multiple threads to coordinate and communicate with each other in a concurrent environment. In .NET, 𝗦𝗲𝗺𝗮𝗽𝗵𝗼𝗿𝗲 is a class that is provided by the 𝗦𝘆𝘀𝘁𝗲𝗺.𝗧𝗵𝗿𝗲𝗮𝗱𝗶𝗻𝗴 namespace and is used to control access to a limited resou…

Read More
Repository Pattern for modular code

𝗪𝗵𝗮t is the 𝗿𝗲𝗽𝗼𝘀𝗶𝘁𝗼𝗿𝘆 𝗽𝗮𝘁𝘁𝗲𝗿𝗻? The repository pattern is used to create an abstraction layer between the application and the data storage, allowing the application to interact with the data storage in a standardized way without having to know the details of how the data is stored. This makes the co…

Read More
CLI Instructions for .NET

Introduction CLI (Command Line Interface) is a command-line interface in which we can execute instructions for compiling, testing, publishing, and running .NET applications, as well as managing references and Nuget packages in projects. CLI comes with the .NET Core Software Development Kit (SDK). We…

Read More
Implementing the Outbox Pattern in a Serverless Architecture with Azure Services and C#

Introduction Distributed systems provide many benefits by distributing processing and storage across multiple nodes, including: However, these benefits rely on certain assumptions, such as: As we all know, 𝗠𝘂𝗿𝗽𝗵𝘆’𝘀 𝗟𝗮𝘄 states that things can go wrong quickly. Losing a message between two servi…

Read More
Azure CLI – Cheat sheet

Logging in Login with web Login in CLI List accounts Set subscription Listing locations and resources / general List all locations List all my resource groups Get what version of the CLI you have Get help Creating a basic VM / Resource Group / Storage Account Get all available VM sizes Get all avail…

Read More
Retry and Deadletter in Event-Driven Architecture with Azure Service Bus

Event-driven architecture is a popular architectural style for building distributed systems that rely on asynchronous messaging between different components. Retry and dead letter are two important mechanisms that help ensure that messages are processed successfully, even in the presence of tempora…

Read More
Sender, Queue, Receiver Publisher, Topic, Subscriber Event-driven Architecture
Pub/Sub vs. PTP: Understanding Messaging Patterns in Event-Driven Architecture

One of the core components of Event-Driven Architecture is messaging, which enables systems to communicate asynchronously and decoupled from one another. In messaging, there are two primary patterns: publish/subscribe (pub/sub) using a Topic and point-to-point (PTP) using a Queue.

Read More
EDA with Kafka and .Net Core

Publish/Subscribe Pattern is a messaging pattern where senders of messages, called publishers, do not send messages directly to specific receivers, called subscribers. Kafka is an open-source distributed streaming platform developed by Apache Software Foundation.

Read More
Event Driven Architecture: An Introduction

Event Driven Architecture (EDA) is a software architecture pattern that allows for the creation of loosely coupled systems that can easily scale and evolve over time. In an EDA, the flow of data is based on events, which are generated by various components of the system and consumed by one or more o…

Read More
Generating bogus HTTP Endpoints with ASP.NET Core Minimal APIs

Generating fake data is a common practice in software development. It is useful for testing, prototyping, and filling databases with realistic data. While there are many libraries out there that can generate fake data, Bogus is one of the most popular and feature-rich ones. But did you know that you…

Read More
Building Minimal APIs with CRUD and Carter

They allow applications to communicate and exchange data with each other seamlessly. Minimal APIs, in particular, have gained popularity due to their simplicity and ease of use.

Read More
Getting Started with GraphQL in ASP.NET Core

GraphQL is a query language and runtime for APIs (Application Programming Interfaces). It allows clients to request exactly the data they need, and nothing more.

Read More
gRPC: a candidate for your future projects?

French version on : www.programisto.fr What is it? gRPC, which stands for Remote Procedure Call, is a cross-platform, open-source communication protocol based on contracts. It simplifies and manages interservice communication by exposing a set of functions to external clients. Protobuf and HTTP/2 fo…

Read More
Test-Driven Development (TDD)

Test-Driven Development (TDD) is a software development practice that involves writing automated tests for code before actually writing the code. The goal of TDD is to improve code quality, reduce defects, and increase productivity by providing quick feedback and catching errors early in the develop…

Read More
CQRS Made Easy with MediatR in C#

CQRS is an architectural pattern that separates the read and write operations of an application into two distinct models, called Command and Query respectively. This separation allows each model to be optimized for its specific use case, resulting in a more scalable and maintainable application. In …

Read More
What is Domain Driven Design ?

Domain Driven Design (DDD) is an approach to software development that emphasizes understanding the business domain and creating a flexible Domain Model that is closely aligned with it. The goal of DDD is to create software that is not just technically correct, but also satisfies the needs of the bu…

Read More
Hexagonal Architecture

Hexagonal architecture, also known as ports and adapters architecture or onion architecture, is an architectural pattern used in software development that organizes an application into a set of layers, with each layer having a specific responsibility.

Read More
Maximizing Software Success: Using the 5W1H and Ishikawa

Software engineering involves designing, developing, and maintaining software systems. To ensure the success of a software system, it is important to understand the requirements, identify potential issues, and make sure the system meets the needs of users and stakeholders.

Read More
YAGNI, KISS, DRY or how do not overengineering

Overengineering is a common problem in software development, where engineers create solutions that are more complex than necessary, making the project more difficult to maintain and increasing development time and costs. To avoid overengineering, software engineers should follow three principles: YA…

Read More
How to monitor a C# App with Azure App Insight and TelemetryClient

Azure Application Insights is a service provided by Microsoft Azure that can help you with this by providing real-time performance and usage data, as well as logs and alerts.

Read More
Azure App Service : Quick overview

Azure App Service is a platform as a service (PaaS) offering from Microsoft that enables you to build, deploy, and scale web, mobile, and API apps.

Read More
Quicksort

Quicksort is a divide-and-conquer algorithm that sorts an array by selecting a « pivot » element and partitioning the other elements into two groups, those less than the pivot and those greater than the pivot. It then recursively sorts the sub-arrays on either side of the pivot. The pivot is typical…

Read More
Filters: A Beginner’s Guide

Filters are a powerful feature in the ASP.NET MVC framework that allow you to add pre-processing and post-processing logic to action methods. Filters can be used to perform tasks such as authentication, caching, logging, and exception handling.

Read More
Dependency Injection : Understanding its Usage, Benefits and Implementation

Dependency Injection (DI) is a design pattern that is widely used in software development to achieve loose coupling between objects.

Read More
Interface segregation principle (ISP)

The Interface Segregation Principle (ISP) is a principle that states that clients should not be forced to implement interfaces they do not use.

Read More
The Liskov Substitution Principle (LSP)

Program should be able to work with any of derived classes without knowing it.

Read More
The open/closed principle (OCP)

Class should be designed in such a way that new functionality can be added without modifying the existing code

Read More
The Single Responsibility Principle (SRP)

Class should have only one reason to change. In other words, a class should have only one responsibility or job.

Read More