Yonatan Karp-Rudin
Posted on • Originally published atyonatankarp.com on
Kotlin Code Smell 12 - Ripple Effect
TL;DR: If small changes have a significant impact, you need to decouple your system.
Problems
- Coupling
Solutions
Decouple.
Cover with tests.
Refactor and isolate what is changing.
Depend on interfaces.
Examples
- Legacy Systems
Sample Code
Wrong
classTime(privatevalhour:Int,privatevalminute:Int,privatevalseconds:Int){funnow(){// call operating system}}// Adding a TimeZone will have a big Ripple Effect// Changing now() to consider timezone will also bring the effect
Right
// Removed now() since it is invalid without contextdata classTime(privatevalhour:Int,privatevalminute:Int,privatevalseconds:Int,privatevaltimezone:String)classRelativeClock(privatevaltimezone:String){funnow(){vallocalSystemTime=this.localSystemTime()vallocalSystemTimezone=this.localSystemTimezone()// Make some calculations to translate timezones...returnTime(...,timezone)}// ...}
Conclusion
There are multiple strategies to deal with legacy and coupled systems. It is essential to address this problem before it becomes unmanageable.
Stay updated with my latest thoughts and ideas by registering for mynewsletter. Connect with me onLinkedIn orTwitter. Let's stay connected and keep the conversation going!
More info
Credits
Top comments(0)
Subscribe
For further actions, you may consider blocking this person and/orreporting abuse