Skip to main content

· 6 min read
Adnan Rafiq

What is an Adapter Pattern?

The Adapter Pattern connects two incompatible objects by exposing an interface compatible with the Client. The object refers to a class, web service, REST API, process, or physical device depending upon your context.

Consider a C# Web Application displaying Weather Updates on its landing by utilizing the third-party REST API.

In this application, there are three participating objects in the Adapter Pattern:

  1. A Weather REST API (Adaptee) has the functionality of weather updates. The Weather REST API only understands JSON.
  2. The C# MVC Web Application (Client) displays weather updates on its landing page using the Weather Web Service.
  3. The Adapter enables the Client to utilize the Adaptee functionality. It does that by doing two things:
    1. It converts the Client's input to the format acceptable to Adaptee i.e. JSON to C# Object(s).
    2. It converts the Adaptee's output to the format acceptable to the Client i.e. C# Object(s) to JSON.

· 15 min read
Adnan Rafiq
Start and Finish Image

Image by awcreativeut

The word Host will repeatedly appear in the post so let's briefly understand what it means?

What is Host?

The Host is a container which offers rich built-in services such as Dependency Injection, Configuration, Logging, Host Services and others. The NET 6 offers Generic DefaultHost which can be configured to handle the activities as per your use case. Two major variations of the Host are:

  • Console Host - CLI based applications.
  • Web Host - Web API & Applications.

Think of it as Airbnb Host who keeps the property ready to serve when the guests arrive. The property offers a different set of services and allows you to bring your own services. The lifetime of such services depends upon the contract, which the Host controls.

Basic Host Example : Create, configure, build, and run the Host
var host = Host.CreateDefaultBuilder(args) //WebHost.CreateDefaultBuilder(args)  
.ConfigureLogging( (context, builder) => builder.AddConsole())
.Build(); // Build the host, as per configurations.

await host.RunAsync();

What is Hosted Service?

A service that performs the work in the background mostly does not offer an interface to interact. In technical terms, any reference type object which implements the IHostedService interface is a background/hosted/worker service.

Terms such as Worker, Windows Service, and Background Task refer to HostedService based on context. In Windows Server, Widows Service is how you deploy a Hosted Service. Background Task or Hosted service runs as part of .NET Web Host, and it runs in the same operating system process.

· 4 min read
Adnan Rafiq

What is Cache Aside Pattern?

It enables you to improve application performance by reading the data from the cache-store (Redis, Memory Cache) instead of the persistent store (database) or an integration service.

· 5 min read
Adnan Rafiq

What is Template Method Pattern?

Template Method Pattern executes multiple same steps in the same order and allows consumers to change the behavior of the steps.

“Implement the invariant parts of an algorithm once and leave it up to subclasses to implement the behavior that can vary.” Elements of Reusable Object-Oriented Software.

· 4 min read
Adnan Rafiq
Image of Hello

Image by @isaacmsmith

What is Chaos Engineering?

Chaos Engineering is about testing & increasing your system resilience.

  • Resilience Definitions on merriam-webster.com
    • the capability of a strained body to recover its size and shape after deformation caused especially by compressive stress
    • an ability to recover from or adjust easily to misfortune or change

We test our system by intentionally causing failure in parts, such as saturating the host's CPU. During the failure, we measure the time to recovery and other metrics you would want to collect.

· 12 min read
Adnan Rafiq
Image of Hello

Image by @helloitsammiel

What are Tuples?

A Tuple is a container to hold multiple values which provide readable syntax when used appropriately. Tuples are available from C# 7 and later versions. There are two types of Tuples:

  1. Value Type
  2. Reference Type

Naturally, you might ask, what is the difference between Value Type and Reference Type?

The .NET runtime manages the memory for your application. It uses two distinct places to store data in memory, known as Stack and Heap. Any Value or Reference Type can end up either on Heap or Stack purely depending upon its usage.

Mental Model : Draw two different shapes in your head. One is fast & small, and the other is big & efficiently managed. Value Types are for small & superfast (Stack), and Reference Types for big & efficient (Heap).

I will not use Stack or Heap in rest of the post. Instead, I want you build a mental model based on two distinct memory regions.

· 4 min read
Adnan Rafiq
Image of Hello

Image by @kellysikkema

What is Agile?

Agile is being flexible in delivering Value to the customer. It is The Team sport. You must read Principles behind the Agile to deepen your understanding.

What is Value?

Solving customer problem is Value. Discussion on Value is always a great sign of a good team. But sometimes, Value is relative, depending upon the context.

Best Practices in Agile

The most important practice is experimenting with your approach to efficiently deliver the Most Value to the customer.