Neither mechanism is better than the other in any general sense. They serve different purposes, and it is uncommon that both are applicable to any given configuration objective.
The 'unless' and 'onlyif' (and 'creates') parameters serve as means for an Exec to determine whether it is already in sync. If it is, then its command will not be run, in the same way that a File that is already in sync will not redundantly download its content. This should also have implications for reports, etc.. The 'unless' and/or 'ifonly' commands must run every time, though.
The 'refreshonly' parameter, on the other hand, makes application of the Exec conditional on (and subsequent to) one or more other resources changing, sort of like an 'on update' trigger in a database.
In any given case, you should use whichever approach makes sense.
John