Let\'s assume there is an operation that creates a user. This operation may fail if specified email or username exists. If it has failed, it is required to know exactly why. The
Test-Create can cause race conditions, so it's not a great idea. It also likely does extra work.
Try-Create is good if you expect errors to be part of normal code flow (such as in the case of user input).
Create-Catch is good if errors are truly exceptional (so you're not worried about performance).