瞭解dto概念,什麼是DTO

来源:http://www.cnblogs.com/simple-blog/archive/2017/06/23/7071740.html
-Advertisement-
Play Games

瞭解dto概念 此博文收集整理了一些主流的文章對於DTO模式的解讀,他們大體相似而又各有所不同。對於設計模式的解讀也是一個仁者見仁智者見智的事情,不過設計模式往往都是前輩們在遇到一類特定的問題下而總結的經驗和智慧。看不同大牛對同一概念的解讀,對比思考,本身就是對於我們思維的一次洗禮。(所有文章均貼有 ...


瞭解dto概念     此博文收集整理了一些主流的文章對於DTO模式的解讀,他們大體相似而又各有所不同。對於設計模式的解讀也是一個仁者見仁智者見智的事情,不過設計模式往往都是前輩們在遇到一類特定的問題下而總結的經驗和智慧。看不同大牛對同一概念的解讀,對比思考,本身就是對於我們思維的一次洗禮。(所有文章均貼有出處,在此感謝大牛們的辛勤勞作。)  

什麼是DTO?

百度百科如何解讀的?   DTO是Data Transfer Object 的簡寫,既數據傳輸對象。 是一種設計模式之間傳輸數據的軟體應用系統。數據傳輸目標往往是數據訪問對象從資料庫中檢索的數據。數據傳輸對象與數據交互對象或數據訪問對象之間是一個不具備有任何行為除了存儲和檢索的數據。(訪問和存取器)   維基百科是如何解讀的?   A data transfer object(DTO) is an  object that carries data between two process. The difference between data transfer and business objects or data access objects is that a DTO does not have any behavior except for storage and retrieval of its own data(mutators and accesssors).DTOs are simple objects that should not contain any business logic that would require testing.   和百度百科不同的是,DTO和MO(Model Object)與BO(Business Object)的不同之處在於DTO沒有任何業務行為(貧血模式)只作為數據的存儲。   原鏈接:https://en.wikipedia.org/wiki/Data_transfer_object References 下有許多有料的參考文章。   有經典的文章是如何解讀的?   博客園dax.net的觀點:        表現層於應用層之間是通過DTO來進行交互的,數據傳輸對象是沒有行為的POCO對象,他的目的是為了對領域對象進行數據封裝,實現層與層之間的數據傳遞。為何不直接將領域對象進行數據傳遞?因為領域對象更註重領域,DTO更註重數據。由於“富領域模型”的特點,這樣會直接將領域對象的行為暴露給表現層。     DTO本身不是業務對象,他是根據UI需求進行設計的。簡單來說Model面向業務,我們是通過業務來定義Model的。而DTO是面向UI,通過UI的需求來定義的,通過DTO我們實現了表現層與Model層之間的解耦,表現層不引用Model。如果開發過程中我們的模型變了,而界面沒變,我們只需改Model而不需要去改動表現層。   原文鏈接:http://www.cnblogs.com/daxnet/archive/2010/07/07/1772584.html   博客園loveis715的觀點:     DTO用於在伺服器與客戶端之間或伺服器與伺服器之間進行數據傳遞,文章從問題出發,然後深入淺出的討論了DTO以及相關的概念,值得一讀。 原文鏈接:http://www.cnblogs.com/loveis715/p/4379656.html DTO – 服務實現中的核心數據   微軟MSDN的觀點:   Create a data transfer object(DTO) that holds all data that is required for the remote call.Modify the remote signature to accept the DTO as the single parameter and to return a single DTO to the client.After the calling application receives the DTO and and stores it as a local object , the application can make a series of individual procedure calls to the DTO without incurring the overhead of remote calls.   大致的觀點是DTO可以有效的減少請求數量,文章中包含示例,討論了問題的由來(為什麼需要DTO),以及DTO使用過程中的一些註意事項。不過在文章的開頭說到這個設計模式已經過時了,從此來看技術的更新迭代真的是很快,只是不知道DTO為什麼過時了?以及哪些新的技術替代了DTO?   原文鏈接: https://msdn.microsoft.com/en-us/library/ms978717.aspx   Pattern of Enterprise  Application Architecture 作者觀點:     An object carries data between two processes in order to reduce the number of method calls.          When you are working with a remote interface,such as Remote Facade,each call to it is expensive.As a result you should reduce the number of calls, and that means that you need to transfer more data with each call.One way to do this is to use  lots of parameters. However, this is often awkward  to program - indeed,it's often impossible with languages such as Java that return only a single value.       The solution is to create a Data Transfer Object that can hold all the data for the call.It needs to be serializable to go across the connection.Usually an assembler is used on the server side to transfer data between the DTO and any domain objects.           Although the main reason for using a Data Transfer Object is to batch up what would be mutiple remote calls into single call,it's worth mentioning that another advantage is to encapsulate the serialization mechanism for transferring data over write.By encapsulating the serialization like this ,the DTOs keep this logic out of the rest of the code and also provide a clear point to change  serialization should you wish.   原文鏈接: https://martinfowler.com/eaaCatalog/dataTransferObject.html     觀點和loveis715有一致的地方,簡而言之DTO的存在就是為了幫助我們減少客戶端請求而降低伺服器壓力,提升效率。作者還有一個觀點大概是指在使用DTO後我們可以靈活定義數據模型,同時將數據模型和邏輯剝離開了。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目背景 ·題目名稱是吸引你點進來的 ·實際上該題還是很水的 題目描述 ·1+1=? 顯然是2 ·a+b=? 1001回看不謝 ·哥德巴赫猜想 似乎已呈泛濫趨勢 ·以上純屬個人吐槽 ·給定一個正整數n,求將其分解成若幹個素數之和的方案總數。 輸入輸出格式 輸入格式: 一行:一個正整數n 輸出格式: ...
  • 題目描述 巫妖王的天災軍團終於卷土重來,血色十字軍組織了一支先鋒軍前往諾森德大陸對抗天災軍團,以及一切沾有亡靈氣息的生物。孤立於聯盟和部落的血色先鋒軍很快就遭到了天災軍團的重重包圍,現在他們將主力只好聚集了起來,以抵抗天災軍團的圍剿。可怕的是,他們之中有人感染上了亡靈瘟疫,如果不設法阻止瘟疫的擴散, ...
  • Plugins 摘一段來自MyBatis官方文檔的文字。 MyBatis允許你在某一點攔截已映射語句執行的調用。預設情況下,MyBatis允許使用插件來攔截方法調用: Executor(update、query、flushStatements、commint、rollback、getTransact ...
  • 類 Fabric 主機管理程式開發:1. 運行程式列出主機組或者主機列表2. 選擇指定主機或主機組3. 選擇讓主機或者主機組執行命令或者向其傳輸文件(上傳/下載)4. 充分使用多線程或多進程5. 不同主機的用戶名密碼、埠可以不同 README 1 import configparser 2 imp ...
  • 今天工作中聯調外部的一個介面用post方式傳輸,我按照文檔封裝參數成Jason字元串傳入,但是對方一直接受參數為空,折騰了半天也沒找到問題。很苦惱,檢查代碼都沒有錯誤,可是為什麼對方接受參數為空呢?然後找對方的技術人員聯調,看看是怎麼回事,也折騰了半天最後發現對方是用NameValuePair方式傳 ...
  • C++getline使用 一、心得 二、使用 getline(istream &in, string &s) 從輸入流讀入一行到string s •功能: –從輸入流中讀入字元,存到string變數 –直到出現以下情況為止: •讀入了文件結束標誌 •讀到一個新行 •達到字元串的最大長度 –如果get ...
  • 題目背景 快noip了,yyy很緊張! 題目描述 現在各大oj上有n個比賽,每個比賽的開始、結束的時間點是知道的。 yyy認為,參加越多的比賽,noip就能考的越好(假的) 所以,他想知道他最多能參加幾個比賽。 由於yyy是蒟蒻,如果要參加一個比賽必須善始善終,而且不能同時參加2個及以上的比賽。 輸 ...
  • 1.Clone()方法產生一個object,使用方法後必須產生的object賦值。 Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保護類型方法,如果自己創建的類需要使用Clone()方法的話需要自己重新寫一個,並且繼承Cloneable介面。 ... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...