MicroObjects (originally µObjects) introduce a paradigm shift in how to write maintainable Object Oriented code that is highly resistant to code rot.
MicroObjects help your code be more maintainable through many best practices being inescapable. A couple of these are that objects become inherently thread safe and emergent design and evolutionary architecture is unavoidable.
Through the information presented; MicroObjects' benefits will be discussed and examples of refactoring into MicroObjects will be demonstrated.
Driving principle
Have a representation for every concept that exist in the code.
The Technical Practices of MicroObjects
- No Getters (or Setters)
- Be immutable
- Interface for Behavior Contracts
- Abstract 3rd Party Code
- No Public Statics
- If Only as a Guard Clause
- Switch and Else are always evil
- No Nulls
- No
new
inline - Extract Cohesion
- Composition over Inheritance
- No primitives
- No enums
- No logic in constructors
Why?
- Maintainability
- Null Safety
- Thread Safety
- High Cohesion
- Low Coupling
- Fully Testable
- Composition over Inheritance
- Common Patterns
CLEAN Code
- µObjects: Being Cohesive
- µObjects: Being Loosely Coupled
- µObjects: Being Encapsulated
- µObjects: Being Assertive
- µObjects: Being Nonredundant
Examples
I'm always trying to improve how I write code. As such, exactly how my implementation of MicroObjects goes changes over time. Check the dates on the last commit of these; the further back they are, the more likely I do stuff a little different.
Example implementations of microobject concepts
https://github.com/Fyzxs/DeliverAgileFizzBuzz
https://github.com/Fyzxs/FractionalMath
https://github.com/Fyzxs/HackerNewsReader
https://github.com/Fyzxs/microBattleshipFirst
https://github.com/Fyzxs/MicroObjectMagicTheGathering
https://github.com/Fyzxs/MicroObjectPizzaShop
https://github.com/Fyzxs/microObjectsBowlingRefactor
https://github.com/Fyzxs/MicroObjectsCalculator
https://github.com/Fyzxs/MicroObjectTicTacToe
https://github.com/Fyzxs/MicroObjectUiExample
https://github.com/Fyzxs/MicroPlayingCards
https://github.com/Fyzxs/PomodoroTimer