Temporal coupling is a serious code smell. It should be hard for a developer to call a good API incorrectly.
Usage of a BadApi that is temporally coupled
The above code compiled, yet an error was thrown are runtime. Why?
BadApi implementation
The 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.
Usage of a good api
Other than passing invalid data, it is difficult to call this API incorrectly.
GoodApi implementation
Validate early, with type-safe objects instead of Strings
.
Two possibile .login()
implementations:
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!