Лично я предпочитаю объекты передачи данных, но наборы данных работают в крайнем случае.
По сути, идея заключается в том, что если вы работаете с объектами передачи данных (которые не имеют логики и представляют модель, с которой вы хотите работать на клиенте), это абстракция, на которой можно жить независимо от изменений на передней или задней части. Обычно это хорошая идея.
DataSets полезны, но их отсутствие безопасности во время компиляции (хотя не в случае строго типизированных DataSets) из-за числового / строкового доступа к полям может представлять проблему.
Как правило, при сериализации DataSets по проводам также возникают большие издержки по сравнению с объектом передачи данных.