2021-03-07
This document gives an overview about software design: architecture, pattern, paradigm.
You may read, heard a lot of these terms. Lets be a bit more precise.
When we talk about Software Architecture we mean the software structure mainly in a complex software system. How to organize the code. Its the high-level building block.
With Design Pattern commonly the repeating problems can solved proven building blocks.
And Programming Paradigm is the way of programming: functional, object oriented, imperativ, declarativ, reactive, ...
To conclude, these terms, approaches or techniques are a kind of best practices in software engineering.
But firstly you should focus on problem solving. If you are familliar enough with the techniques you should use it.
Delegation is like inheritance done manually through object composition.
When do we need inheritance or composition? Whenever we have depdendencies we can use OOP techniques to use other components functions. E.g. a class method we don't have.
A class has an object (composition) rather then is a object (inheritance).
Kotlin has a kind of build-in support for Delegation Pattern with the by
-clause.
The Delegation Pattern is also known as Proxy or Adapter Pattern.
Code example: https://github.com/leventarican/cookbook/blob/master/kotlin/dojo/kata16.kt
The Entity Component System paradigm. This architecture type is commonly used in game development. It can be used in data driven development (DDD). In ECS you have:
To name some usage example. The game engine bevy uses the data-driven approach. Also Unity goes from OOP approach to ECS approach.
TODO
TODO
The Data Driven Development paradigm.
Data Oriented Programming
TODO: Domain Driven Development.
The Hype Driven Development paradigm.
The Model - View - ViewModel is commonly used in Android environment.