Каким должен быть мой DTO-объект для ASP.Net MVC View? - PullRequest
2 голосов
/ 19 мая 2010

Хотелось бы знать, у меня есть приложение в asp.net mvc и nhibernate. Я читал об этом в mvc Views на asp.net, не должен знать о Домене, и для этого нужно использовать объект DTO. Итак, я пытаюсь это сделать, я нашел компонент AutoMapper и не знаю, как правильно сделать свою DTOS для некоторых доменных объектов. У меня есть класс домена, как это:

public class Entity 
{
   public virtual int Id { get; set; }
   public virtual bool Active { get; set; }
}

public class Category : Entity 
{ 
   public virtual string Name { get; set; }
   public virtual IList<Product> Products { get; set; }

   public Category() { }
}

public class Product : Entity 
{ 
   public virtual string Name { get; set; }
   public virtual string Details { get; set; }
   public virtual decimal Prince { get; set; }
   public virtual int Stock { get; set; }
   public virtual Category Category { get; set; }
   public virtual Supplier Supplier { get; set; }

   public Product() { }
}

public class Supplier : Entity 
{
   public virtual string Name { get; set; }
   public virtual IList<Product> Products { get; set; } 

   public Supplier() { }  
}

Я хотел бы получить пример того, как я могу сделать мои DTO для просмотра? Нужно ли использовать только строки в DTO? И мои контроллеры, он должен получить объект домена или DTO и преобразовать его в домен для сохранения в хранилище?

Большое спасибо!

Приветствия

1 Ответ

1 голос
/ 19 мая 2010

Нет никаких указаний по этому вопросу, и это зависит от вашего личного выбора. У меня есть несколько советов, которые оказались полезными на практике:
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.

...