Make development easier with obvious APIs enforced at compile time
Temporal coupling is a serious code smell. It should be hard for a developer to call a good API incorrectly.
The above code compiled, yet an error was thrown are runtime. Why?
badApi.url field was not set before calling
login(). Requiring certain methods of a class to be called in a specific order is known as temporal coupling, which slows down development velocity.
How to avoid temporal coupling
Other than passing invalid data, it is difficult to call this API incorrectly.
Validate early, with type-safe objects instead of
fun login(username: String, password: String)
fun login(username: Username, password: Password)
#1 allows the developer to accidentally mix-up the username and password fields (code compiles because both parameters are Strings), while #2 makes that impossible.
Code is available on GitHub.
Catch the conversation on Reddit!