簡體   English   中英

DTO / POCO應該在所有屬性上都有構造函數和私有setter嗎?

[英]Should a DTO/POCO have a constructor and private setters on all properties?

我知道這里有很多關於DTO和POCO的討論,但我真的找不到這個。 在沒有構造函數與私有setter和構造函數的情況下編寫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; }
}

這兩種方法中的任何一種都被認為是反模式的嗎? 為什么? 我的意思是,我知道有人可能會支持不變性或鍋爐平台和重構問題,但是有沒有事實上的方法,這是正式的嗎?

DTO不應該是不可變的,因為主要目的是可序列化和反序列化。 所以不變性無關緊要。

  1. 你需要將DTO標記為DTO ...例如添加postfix DTO(PersonDTO)
  2. 您必須確保在任何邏輯中都不使用DTO。 收到DTO后應該轉換為Domain對象

可變的親

  • 易於構造
  • 易於序列化

可變的缺點

  • 可以改錯...

不變的親

  • 不能誤改......

不變的利弊

  • 有時很難建構
  • 序列化程序可能有問題

例B更好,因為它是不可變的。 DTO的目的是傳輸數據,因此不需要更改數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM