Kotlin Code Smell 12 - Ripple Effect
Yonatan Karp-Rudin
Posted on December 17, 2022
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
class Time(
private val hour: Int,
private val minute: Int,
private val seconds: Int
) {
fun now() {
// 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 context
data class Time(
private val hour: Int,
private val minute: Int,
private val seconds: Int,
private val timezone: String
)
class RelativeClock(private val timezone: String) {
fun now() {
val localSystemTime = this.localSystemTime()
val localSystemTimezone = this.localSystemTimezone()
// Make some calculations to translate timezones...
return Time(..., 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 my newsletter. Connect with me on LinkedIn or Twitter. Let's stay connected and keep the conversation going!
More info
Credits
💖 💪 🙅 🚩
Yonatan Karp-Rudin
Posted on December 17, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.