When configuring a field in a view such as the node title, there are options to add or remove formatting to the view by either excluding the field from view, wrapping the field in a certain type of tag such as div, span or h3 or rewriting the output of the field which in conjunction with replacement tokens can yield quite complex structures.
The default views row template, for example, just loops through each field and prints it to the template. However, it is possible to print each field's variable in a particular place by rewriting the template. The templates are good because logic can be added to the template, for example, testing for number of comments to determine the plurality of the word comment that is prefixing the number of comments. The template is also useful for using the drupal_add_js() function to add javascript files that are only loaded even when the Drupal javascript caching is enabled during that particular page load.
There is third place to add logic to theming a view which is in the hook_views_pre_render() function.
With the several different ways to control the markup and output logic of a view are there best practice? Are there different techniques that are appropriate for different situations?