.. include:: /Includes.rst.txt .. index:: Extension development; Software Design Principles .. _extension-software-design-principles: ========================== 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) `__ organizes software design around data, or objects, rather than the functions and logic of procedural programming. * `Domain-Driven Design (DDD) `__ is a collection of principles and patterns that help developers design elegant code around clearly defined conceptual models. * `Model-View-Controller (MVC) `__ is a programming paradigm that leads to clear isolation of data, presentation layer, and business logic. * `Test-Driven Development (TDD) `__ is a basic technique for generating code that is stable, resilient to errors, and legible — and therefore maintainable. * `Dependency Injection `__ is a software design pattern that adds flexibility by removing the need for hard-coded dependencies. * `Separation of Concerns `__ and `Single-responsibility principle (SRP) `__ are computer programming principles that help developers create modular, coherent, and maintainable software. We also recommend to study common `software design patterns `__.