Domain Driven Design - A quick introduction

What is Domain Driven Design? Domain-driven design (DDD) is a software design approach that focuses on modeling software by matching a specific area of the business, called domain. In this approach, as the name suggest, the domain is the “center of gravity”, and everything else orbits around it. The domain is typically divided into subdomains, which are smaller, more focused areas of the domain. Let’s consider a hypothetical e-commerce application as an example:...

March 12, 2024 · 14 min · Alessio Debernardi Venon

Algorithm complexity

Algorithm complexity is a crucial concept in computer science that helps us analyze the efficiency of algorithms. Whether you’re a budding programmer or a seasoned developer, understanding algorithm complexity is essential for writing efficient and scalable code. In this blog post, we’ll explore the basics of algorithm complexity and guide you through the process of calculating it. What is Algorithm Complexity? Algorithm complexity is a measure of the efficiency of an algorithm in terms of the resources it consumes....

November 28, 2023 · 8 min · Alessio Debernardi Venon

Hexagonal (Ports and Adapters) Architecture

In the realm of software architecture, various design patterns and principles aim to enhance the flexibility, maintainability, and scalability of applications. One such pattern that has gained prominence is the Hexagonal Architecture, also known as Ports and Adapters. This architectural style, introduced by Alistair Cockburn in 2005, provides a clean separation between the core business logic of an application and its external dependencies, such as the user interface, database, and external systems....

November 12, 2023 · 7 min · Alessio Debernardi Venon

Trunk-based development - TBD

Trunk-based development (TBD) is a software development workflow that emphasizes frequent, small commits to a single codebase branch, called trunk or main branch. In TBD, developers works and push their changes directly into the trunk branch, or create short-lived feature branches that are merged back into the trunk frequently. This helps to keep the trunk branch up-to-date and ready for deployment at any time. This is in contrast with other branching models, such as Git Flow, which uses multiple long-lived branches for different purposes (such as development/staging/production and releases)....

October 30, 2023 · 3 min · Alessio Debernardi Venon

Basics of OOP design - SOLID principles

SOLID is an acronym for five object-oriented design principles used to design software that is robust, testable, extensible, and maintainable. These design principles are: Single Responsibility Principle (SRP) Open-closed Principle (OCP) Liskov substitution principle (LSP) Interface segregation principle (ISP) Dependency inversion principle (DIP) Single Responsibility Principle (SRP) A class should have one, and only one, reason to change Each module should perform a single task or function, and should be responsible for that task only....

October 2, 2023 · 9 min · Alessio Debernardi Venon