Какова наилучшая практика при реализации объекта передачи данных или POCO? Как должны выглядеть ваши POCO? - PullRequest
3 голосов
/ 11 марта 2009

Что из перечисленного является лучшим способом реализации poco?

Вариант 1:

public class PocoOption1
{
  public PocoOption1(int val1,string val2)
  {
    Val1=val1; Val2=val2;
  }

  public int Val1{get;private set;}
  public int Val2{get;private set;}
}

Вариант 2:

public class PocoOption2
{           
  public int Val1{get;set;}
  public int Val2{get;set;}
}

Каковы потенциальные преимущества каждого подхода? Это имеет значение? Некоторые люди говорят, что DTO должен быть установлен только один раз. Это правило или просто мнение ??

Ответы [ 2 ]

3 голосов
/ 11 марта 2009

Варианты немного отличаются. Вариант 1 позволяет вам установить Val1, Val2 только один раз. Опция 2 позволяет вам устанавливать и сбрасывать эти значения.

В общем, я фанат общедоступных конструкторов по умолчанию. Это делает API более простым в использовании. Это подробно обсуждается Кшиштофом Квалиной и Брэдом Абрамсом в книге «Руководства по разработке структуры». Вот основные моменты:

  • Используйте шаблон «Создать, Установить, Позвонить». Есть конструктор по умолчанию без параметров. Затем разрешите свойства для объекта (в любом порядке). Затем разрешите вызов методов.
  • Конструктор по умолчанию - канонический метод построения объекта. Это будет первая опция, которую попробует пользователь.
  • Заставить пользователя выбирать параметры во время строительства может быть сложно. Кроме того, некоторые параметры могут быть необязательными.
  • Пусть ваш объект будет в недопустимом состоянии в течение ограниченного периода времени. Бросайте исключения для сообщения о неправильном использовании API. (Если объект имеет две зависимости, то генерирует InvalidOperationException, если пользователь пытается вызвать метод без необходимых настроек.)

На мой взгляд, вариант 2 - это путь.

3 голосов
/ 11 марта 2009

С новым синтаксисом C #, где вы можете делать такие вещи, как:

Customer customer =  new Customer{ Id = 1, 
     Name="Dave",                                             
     City = "Sarasota" };

Вы можете безопасно использовать Вариант 2.

Пожалуйста, отметьте здесь .

...