Должен ли DTO / POCO иметь конструктор и частные сеттеры для всех свойств? - PullRequest
0 голосов
/ 13 июня 2018

Я знаю, что здесь много дискуссий о DTO и POCO, но я не смог найти ни одного по этому поводу.Существует ли правило написания DTO без конструкторов против частных сеттеров и конструкторов?

Пример A:

public class Person
{
    public int Id { get; set; }
    public String Name { get; set; }
    public int Age { get; set; }
}

Пример B:

public class Person
{
    public Person (int id, String name, int age)
    {
        Id = id;
        Name = name;
        Age = age;
     }

    public int Id { get; }
    public String Name { get; }
    public int Age { get; }
}

Любой из двухподходы считаются анти-паттерном?Зачем?Я имею в виду, я знаю, что можно спорить в пользу неизменяемости или проблем с установкой котлов и рефакторингом, но существует ли подход де-факто, что-то официальное?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

DTO не должен быть неизменным, потому что главная цель - быть сериализуемыми и десериализуемыми.Так что неизменность не имеет значения.

Но

  1. Вам нужно пометить DTO как DTO ... Например, добавьте постфикс DTO (PersonDTO)
  2. Вы должны быть уверенычто вы не используете DTO в любой логике.После получения DTO должны быть преобразованы в доменные объекты

Mutable Pro

  • легко конструируемые
  • легко сериализуемые

Изменяемые минусы

  • может быть изменено по ошибке ...

Неизменяемый pro

  • не может быть изменено по ошибке ...

Неизменные минусы

  • иногда трудно построить
  • могут возникнуть проблемы с сериализаторами
0 голосов
/ 20 июня 2018

Пример B лучше, потому что он неизменен.Целью DTO является передача данных, поэтому нет необходимости изменять данные.

...