Service and entity_id over device every time.
Consider the case where you have a physical device fail and have to replace it.
It will have a new device_id, which you cant change. All your previous automations, scripts and scenes that used the old device_id no longer function. You need to do a “find and replace” in the yaml configuration for all instances where the old device_id was used and replace it with the new one.
If you only ever used entity_ids in your automations, scripts and scenes then all you have to do is change the new entity_id to match the old one. In one place. The entities list, or device page.
Also you can use templates in service calls but not device actions.