CUPID SUMMARIZED
CUPID does make sense in itself. It is a lot easier to learn and to understand than the SOLID Principles. I guess it is also easier for beginners to design projects properly when implementing these properties to their code. You can read more about my thoughts on CUPID here.
This is cupid as designed by Dan North (taken from these slides):
[C] U P I D - Composable
plays well with others
- Small "surface area"
- Intention-revealing name and purpose
- Minimal dependencies
C [U] P I D - Unix philosophy
does one thing well
- Each Program (/Component) should do one thing well
- Expect the program's output to be input for another program
C U [P] I D - Predictable
does what you expect
- behaves as expected with no surprises (even without tests)
- deterministic
- observable (internal state can be inferred from outputs)
C U P [I] D - Idiomatic
feels natural
- language idioms (coding style)
- local idioms (coding standards)
C U P I [D] - Domain based
in language and structure
- domain language
- domain structure
- domain boundaries
#################################
For me it is important to understand these properties well and to be able to teach them easily. Therefore I translated them to german.
[C] U P I D - Kompatibel
hohe Integrierbarkeit
- Kleine Berührungspunkte
- Aussagekräftiges Namensschema und erkennbares Ziel
- Minimale Abhängigkeiten
C [U] P I D - Unix-Philosopie
macht eine Sache richtig
- Jedes Programm (/Komponente) macht eine Sache. Und die richtig.
C U [P] I D - Vorhersehbar
Tut, was du erwartest
- Verhält sich erwartungsgemäß, ohne Ausnahme!
- entschlossen (macht jedes mal dasselbe, klares Funktionsverhalten)
- ersichtlich (Ausgabe gibt Einblick in Variablenwerte)
C U P [I] D - Sprachgewandt
fühlt sich natürlich an
- Vorgaben der Sprache (coding style)
- Vorgaben der Firma (coding standards)
C U P I [D] - Domänebasiert
in Sprache und Struktur
- Domänespezifische Sprache
- Domänespezifische Struktur (antstatt frameworkabhäniger Struktur)
- Domänespezifische Grenzen (Modulgrenzen, Einheiten etc.)