Problem:
You have an operation that needs to be carried out
(e.g., on a database, a configuration file, etc.)
Context:
The operation is one of a series that will be carried out.
Or:
The operation may be carried out incorrectly the first time, and may need to be fixed and re-done (e.g., installation in
TestEnvironments that may uncover defects).
Solution:
Design the operation to be
idempotent; that is, if it's carried out more than once, it's as if it was carried out just once.
(You may remember from math courses that an
idempotent function
f is one where, for all values of
x,
f(f(x))=f(x). (For example, the function that returns the absolute value of a number is idempotent.)
Resulting context of AntiPattern:
"Sorry, once that's been done, we have to do all
this stuff before we can do it again." (*sigh*)
Related patterns:
Most (all?)
FunctionalProgramming is idempotent, but not all idempotent design is functional.
--
PaulChisholm
I think that's a bit ambiguous. Are you talking about f(x) followed by f(x), in which the second function call must evaluate to the same as the first in a functional language, or are you talking about f(f(x))? There's no reason why the latter should be true for arbitrary f, even in functional languages. --
JasonGrossman
Definitions:
I have a question:
DoesBeingStatelessImplyBeingIdempotent?
Please add your comments to
IdempotentDesign.