It happens when developers avoid creating their own fundamental types to deal with domain behavior or complex logic (for example, currency 🪙, telephone numbers ☎️, addresses📬), and rely too much on primitives. This does not leverage any of the principles of information hiding and encapsulation and can result in very poor 👎maintainability.
Why is it bad? 🤔
This leads to poor encapsulation since knowledge about how to handle such domain behavior gets fragmented 🪓 throughout the code.
This can very easily lead to duplication of knowledge when having to deal with validation ✅ and other operations.
It's easy to forget 🤦♂️ to update parts of the knowledge when the intended behavior changes.
How to fix it? 🔧
Model domain behavior and non-primitive knowledge through custom types 🆔 .
Beware of overfitting 💪 types to their use cases. This can lead to "type explosion" 💥, which also leads to hard-to-maintain code. "Type explosion" happens when we create too many fundamental types which differ from each other only slightly, indicating we are missing the correct underlying abstractions.