In functional and reactive applications, side-effects must be present only in drivers. For debugging purposes, traces can be added in the pure code with the do_action operator.
The code in drivers should be as small as possible, limited to the part that is the side-effect. If a driver contains a side-effect and additional logic, then the additional logic should be moved out of the driver into some pure code. This has several benefits:
- The driver is easier to test, since it does fewer things. This is good because testing side-effects is more complex than testing pure functions.
- The resulting logic is now independent of the driver. It means that is can be used with other drivers, implementing similar side-effects but in a different way or with different technologies. When this additional logic is a full protocol, then it becomes a sans...