public bool Process() { var isFailed = false; if (!isFailed) { try { if (_contract.UserCheck(_user)) { if (_contract.PreContract(_user, _goods)) { isFailed = _contract.DoContract(_user, _goods, _company); _contract.PostContract(_user, _goods, _company); } } } catch (Exception e) { isFailed = true; } } if (isFailed) { _contract.CancelContract(_user, _goods, _company); } return(isFailed); }