So, components give both modularity and natural distribution. Structuring an application into independent components can create the problem of managing the components. Monolithic programs fail and are restarted as a unit. But, with a modular system, the failure of one component must not corrupt the others. There must be a way to isolate faults and limit fault propagation.
Transactions provide modular execution and thus simplify and automate fault handling.
They provide a simple conceptual execution framework for both implementers and users. The user thinks of a transaction as a single change event that either happens or doesn't happen. Implementers think of a transaction as a programming style that allows them to write modules that can participate in distributed computations. Suppose you want to transfer money from one bank account to another. The implementers and the users want to make sure that either both accounts change or neither changes.