Какова наилучшая практика при реализации объекта передачи данных или POCO?Как должны выглядеть ваши POCOS?

StackOverflow https://stackoverflow.com/questions/636030

  •  10-07-2019
  •  | 
  •  

Вопрос

Какой из перечисленных ниже способов является наилучшим для реализации 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 следует устанавливать только один раз.Это правило или просто мнение??

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Пожалуйста, проверьте здесь .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top