數據傳輸對象
外觀
在電腦編程中,數據傳輸對象 (data transfer object,DTO[1][2])是在2個行程中攜帶數據的對象。因為行程間通訊通常用於遠端介面(如web服務)的昂貴操作。[2]成本的主體是客戶和伺服器之間的來回通訊時間。為降低這種呼叫次數,使用DTO聚合本來需要多次通訊傳輸的數據。[2]
DTO與業務對象或數據訪問對象的區別是:DTO的數據的變異子與訪問子(mutator和accessor)、語法分析(parser)、序列化(serializer)時不會有任何儲存、取得、序列化和反序列化的異常。即DTO是簡單對象,不含任何業務邏輯,但可包含序列化和反序列化以用於傳輸數據。[1]即DTO僅包含數據,不包含任何邏輯(logic)和行為(behavior)。邏輯(logic)和行為(behavior)指該類型的方法。對於C#,DTO只包含屬性(property),這些屬性只能讀(get)、寫(set)數據,不能對屬性做驗證(validate)或執行其他操作。
向DTO添加元數據以使其支援模型驗證或類似目的的情況並不罕見。這不會向DTO本身添加任何行為,而是使能系統其他地方行為。 因此,它們並沒有違反DTO不應包含任何行為的「規則」。
術語
[編輯]值對象不是DTO。過去Sun/Java環境曾把二者混為一談。[2]
例子
[編輯]public class ProductViewModel
{
public int ProductId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string ImageUrl { get; set; }
public decimal UnitPrice { get; set; }
}
參考文獻
[編輯]- ^ 1.0 1.1 MSDN (2010). Data Transfer Object. Microsoft MSDN Library. Retrieved from https://msdn.microsoft.com/en-us/library/ms978717.aspx (頁面存檔備份,存於互聯網檔案館).
- ^ 2.0 2.1 2.2 2.3 Fowler, Martin (2010). Data Transfer Object. Patterns of Enterprise Application Architecture. Retrieved from http://martinfowler.com/eaaCatalog/dataTransferObject.html (頁面存檔備份,存於互聯網檔案館).