---
title: "Software Design Principles"
manual: "TYPO3 Explained"
version: "11.5"
permalink: "https://docs.typo3.org/permalink/t3coreapi:extension-software-design-principles@11.5"
source: "ExtensionArchitecture/BestPractises/SoftwareDesignPrinciples.rst"
rendered: "2026-10-21T15:30:00+00:00"
---

> [!WARNING]
> **Attention**
>
> TYPO3 v11 has reached end-of-life as of October 31th 2024 and
> is no longer being maintained. Use the version switcher on the top
> left of this page to select documentation for a supported version of TYPO3.
>
> Need more time before upgrading?
> You can purchase Extended Long Term Support (ELTS) for TYPO3 v11 here:
> [TYPO3 ELTS](https://typo3.com/services/extended-support-elts).

# Software Design Principles {#extension-software-design-principles}

The following principles are considered best practices and are good to know when you develop
extensions for TYPO3.

-   [Object-Oriented Programming (OOP)](https://phptherightway.com/#programming_paradigms) organizes software design around data, or objects, rather than the functions and logic of procedural programming.
-   [Domain-Driven Design (DDD)](https://leanpub.com/ddd-in-php) is a collection of principles and patterns that help developers design elegant code around clearly defined conceptual models.
-   [Model-View-Controller (MVC)](https://code.tutsplus.com/tutorials/mvc-for-noobs--net-10488) is a programming paradigm that leads to clear isolation of data, presentation layer, and business logic.
-   [Test-Driven Development (TDD)](https://phptherightway.com/#test_driven_development)  is a basic technique for generating code that is stable,
    resilient to errors, and legible — and therefore maintainable.
-   [Dependency Injection](https://phptherightway.com/#dependency_injection) is a software design pattern that adds flexibility by removing the need for hard-coded dependencies.
-   [Separation of Concerns](https://en.wikipedia.org/wiki/Separation_of_concerns) and [Single-responsibility principle (SRP)](https://en.wikipedia.org/wiki/Single-responsibility_principle) are computer programming principles that help developers create modular, coherent, and maintainable software.

We also recommend to study common [software design
patterns](https://designpatternsphp.readthedocs.io/en/latest/).
