ASP.NET Свойства DTO веб-службы против общедоступных переменных

#c# #asp.net #web-services

#c# #asp.net #веб-сервисы

Вопрос:

У меня есть веб-служба, которая вернет список, в котором пользователь является DTO. Есть ли какая-либо причина, по которой я не должен определять Person как:

 public class Person {
    public string Name;
    public string Email;
}
  

вместо

 public class Person {
    private string _name;
    public string Name {
      get {
       return _name;
      }
      set {
       _name = value;
      }
   }
}
  

Вторая версия более подробная, и я не вижу никаких причин, по которым общедоступные переменные экземпляра могут быть здесь проблемой. Какая-либо причина, по которой это может быть?

Ответ №1:

Свойства предпочтительнее полей для поддержки

  • привязка; поля не могут быть привязаны
  • полиморфизм; вы не можете сделать public virtual string Name;

Вы можете использовать автоматические свойства для уменьшения детализации

 public class Person {
    public string Name { get; set; }
    public string Email { get; set; }
}
  

Комментарии:

1. однако не было определено, какая технология обслуживания — некоторые прокси-классы генерируются как поля, а не свойства.

Ответ №2:

В целом — это дизайнерское решение — смотрите: http://forums.asp.net/t/1233827.aspx Но реализация DTO немного отличается. Поскольку это всего лишь DTO, и нет поведения без конкретной реализации свойства set / get, вы могли бы с таким же успехом использовать менее подробный метод. Любое изменение реализации не потребует перекомпиляции клиента, поскольку в любом случае они будут сериализованы одинаково через службу, так что ваша меньшая реализация подойдет.

К вашему сведению, если клиент собирается использовать эти классы для привязки к данным, то они должны быть свойствами в классе. Поля не будут привязаны.

Ответ №3:

В дополнение ко всем другим ответам, свойства позволяют выполнять проверку при чтении или записи свойства. Это потребовало бы больше работы при использовании полей.