Нет никаких указаний по этому вопросу, и это зависит от вашего личного выбора. У меня есть несколько советов, которые оказались полезными на практике:
1. Используйте плоские DTO - это означает, что свойства DTO должны быть максимально примитивными. Это избавляет вас от необходимости проверки нулевой ссылки.
Например, если у вас есть такой доменный объект:
public class Employee
{
prop string FirstName{get; set;}
prop string LastName{get; set;}
prop Employee Boss{get; set;}
...
}
И вам нужно вывести в сетку список сотрудников и отобразить информацию для их босса 1-го уровня. Я предпочитаю создать DTO
public class EmployeeDTO
{
prop string FirstName{get; set;}
prop string LastName{get; set;}
prop bool HaveABoss{get;set}
prop string BossFirstName{get; set;}
prop string BossLastName{get; set;}
...
}
или как-то так (-:
2. Не конвертируйте все в sting - это свяжет DTO с конкретным представлением, потому что вы будете применять специальное форматирование. Это не проблема, чтобы применить простое форматирование прямо в представлении.
3. Используйте DTO в своих публикациях и затем конвертируйте их в объекты домена. Обычно действия контроллера являются первой линией защиты от неверных данных, и вы не можете ожидать, что сможете всегда создать действительный объект домена из пользовательского ввода. В большинстве случаев вам нужно выполнить некоторую постобработку, такую как проверка, установка значений по умолчанию и так далее. После этого вы можете создавать свои DTO.