it’s good to use a push and a pull method to ensure that participants can get their money no matter the contract state. In addition to and pushing it should contain a withdraw method.
When considering smart contracts and the blockchain it's good:
Options:
A.
to move all existing logic to the blockchain, so everything runs on the same system. This way it might be more complex, but easier to maintain.
B.
to move only those parts to the blockchain that really need the blockchain. This way smart contracts can be easier to read, easier to test and are not so complex.
C.
to move those parts to the blockchain that deal with Ether transfers. All other parts can remain in traditional database systems. This way only the value-transfer is on the blockchain.