Yonatan Karp-Rudin
Yonatan Karp-Rudin

Follow

Yonatan Karp-Rudin

Follow
Kotlin Code Smell 012 - Ripple Effect

Kotlin Code Smell 012 - Ripple Effect

Small changes yield unexpected problems.

Yonatan Karp-Rudin's photo
Yonatan Karp-Rudin
·Dec 17, 2022·

1 min read

Play this article

Table of contents

  • Problems
  • Solutions
  • Examples
  • Sample Code
  • Conclusion
  • More info
  • Credits

TL;DR: If small changes have a big 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 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 math translating timezones...

        return Time(..., timezone)
    }

    // ...
}

Conclusion

There are multiple strategies to deal with legacy and coupled systems. We should deal with this problem before it explodes in our hands.

More info

Credits

 
Share this