Domain Driven Design

Domain-driven design (DDD) is an approach to software development for complex needs by connecting the implementation to an evolving model. The premise of domain-driven design is the following: placing the project’s primary focus on the core domain and domain logic; basing complex designs on a model of the domain; initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual... » read more

Repository Pattern

Provides an abstraction of data, so that your application can work with a simple abstraction that has an interface approximating that of a collection. Adding, removing, updating, and selecting items from this collection is done through a series of straightforward methods, without the need to deal with database. Allows your applications to perform CRUD-like operations.... » read more

Software Design Patterns

Design patterns are well-tested solutions to common problems in software development. The primary goal of any designing pattern is to help you structure your code so it is flexible and resilient. When it comes to your designs, you have to first understand a pattern and then adapt it to your own code. They also allow... » read more

Singleton Pattern

The singleton pattern is a software design pattern that restricts the instantiation of a class to one “single” instance. This is useful when exactly one object is needed to coordinate actions across the system. In C#, you use the “static” declaration. The singleton design pattern solves problems like:[5] How can it be ensured that a... » read more

MVC Design Pattern

An architectural pattern commonly used for developing user interfaces that divides an application into three interconnected parts. This is done to separate internal representations of information from the ways information is presented to and accepted from the user. The MVC design pattern decouples these major components allowing for efficient code reuse and parallel development. A variation is the... » read more

Distributed Design

A distributed system is an application that executes a collection of protocols to coordinate the actions of multiple processes on a network, such that all components cooperate together to perform a single or small set of related tasks. Why build a distributed system? There are lots of advantages including the ability to connect remote users... » read more

Dependency Injection

Dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object. A dependency is an object that can be used (a service). It Increases code reusability and improves code maintainability. It allows us to develop loosely coupled code and reduce tight coupling between software components. DI is providing an object what... » read more

Multithreading

Multithreading is the ability of a central processing unit to execute multiple processes or threads concurrently, supported by the operating system. Safety issues: Without proper synchronization a program where the order of execution is important can cause unexpected results with multiple threads.  Multi-threading is best used for situations where you have a lot of asynchronous functions... » read more

Microservices Architecture

A variant of the Service-Oriented Architecture. A software development technique in which an application as a collection of loosely coupled services. In a microservices architecture, services are fine-grained and the protocols are lightweight. The benefit of decomposing an application into different smaller services is that it improves modularity. This makes the application easier to understand, develop, test, and become more resilient to architecture... » read more