我在我的應用程序中使用了愚蠢的業務對象。只是使用了DTO來轉移對象的選定屬性,但我想知道兩者之間有什麼區別?我無法找到任何。數據傳輸對象(DTO)與愚蠢的業務對象之間的區別?
回答
也許有點多餘的部件之間傳輸數據,但我已經輸入它如此嘿;)
爲了簡單化(很多),業務對象應該有getter/setter方法,DTO應該只有屬性。業務對象需要遵守業務規則,但DTO僅用於傳輸數據;他們不需要遵守任何規則,應該儘可能快地設計出數據。
在像PHP這樣的弱類型語言中,DTO並不總是必需的,因爲可以隨意爲通用對象提供任意屬性。儘管如此,它們仍然可以用於文檔,並且可以使用強類型的函數參數。
我只會說,唯一的區別是意圖,假設你的啞巴業務對象只持有狀態和沒有行爲。
在這種情況下:
- DTO的旨在應用層
- 啞業務對象是你的域模型
其實我用DTO綁定了一個有30個字段的對象,但是我不能在我的DTO和BO本身之間找到任何區別的字段/屬性。在這種情況下,DTO是否被推薦,因爲我現在在項目中有冗餘? – 2010-07-10 17:40:52
@Popo - 完全取決於你。什麼對您的應用程序有意義?你是否以相似的能力使用這兩個?他們有相同的責任嗎? DTO在那裏解耦? – Oded 2010-07-10 17:44:11
嗯,好的。我現在正在使用它們來減少大型BO的內存浪費。還有一件事,如果你是我,你會用DTO來達到這個目的嗎? – 2010-07-10 17:49:39
當你說「愚蠢」的業務對象,你有效地使這些對象與DTO一樣。使業務對象成爲業務對象的是增加了驗證和其他功能邏輯。當他說業務對象需要setter和getter方法時,我不同意用戶「否」他們可以使用屬性就好,他們只需要比任何一個更多。
一個共同的觀點是業務對象應該被允許保存無效值,並且只有在試圖持久化數據庫時纔會拋出異常,在這種情況下屬性工作得很好。但是,大多數應用程序都希望在嘗試發佈到數據庫之前向用戶提供反饋。
羅克福德洛特卡的CSLA.NET方法是在業務對象上使用IsValid()
方法,該方法具有一組已分配給對象本身的規則。還有其他方法可以解決這個問題,但關鍵是業務對象執行驗證。正如你懷疑的那樣,「愚蠢的」業務對象確實只是DTO。
- 1. 在Java中的DTO(數據傳輸對象)和類對象之間的區別?
- 2. 獲取Guice從愚蠢的數據對象創建對象
- 3. 實體,業務對象,數據傳輸對象和業務模型對象有什麼區別?
- 4. C#中的DTO(數據傳輸對象)和代理對象之間的差異
- 5. 數據對象中的業務邏輯與耦合與DTO(vs.?)
- 6. 來自IIFE的對象與返回對象之間的區別
- 7. 函數對象之間的區別R
- 8. 可比對象與對象類型之間的區別
- 9. Java對象與用戶定義對象之間的區別
- 10. 如何有效地使用DTO對象(數據傳輸對象)?
- 11. DAL與BLL之間的傳輸對象
- 12. DTO VS在WCF層的業務對象
- 13. 使用Access.Application對象與數據庫連接之間的區別
- 14. ActionScript - 「通配符」與對象數據類型之間的區別?
- 15. 抽象數據類型和對象之間的區別
- 16. WCF-代理對象,服務對象和普通類對象之間的區別
- 17. 價值對象模式和數據傳輸模式之間的區別
- 18. Django的,_base_manager之間的區別對象
- 19. 對象和*之間的區別?
- 20. 對象和散列之間的區別?
- 21. 對象和字典之間的區別?
- 22. 對象之間的區別(javascript和jquery)
- 23. 依賴注入 - 與數據傳輸對象(DTO)一起使用?
- 24. 驗證DTO和業務對象
- 25. 什麼是Hibernate業務對象? DTO?
- 26. AutoMapper:IDataReader和DTO對象之間的映射
- 27. 數據傳輸對象 - 在DTO中執行映射還是在業務對象中執行映射?
- 28. 傳遞對象之間的數據
- 29. 視圖模型和數據傳輸對象之間有什麼區別?
- 30. null ==對象和對象== null之間的區別
感謝您的詳細回覆。我現在開始掌握一些東西=)謝謝。 – 2010-07-10 17:55:58
在C#中,每個屬性本質上都是一個getter/setter對。在這方面,你的答案在C#領域沒有多大意義。 – Oded 2010-07-10 18:12:04
@Oded:我認爲答案是有道理的。我相信他的觀點是業務對象應該控制DTO包含的數據。通過使用getter和setter方法而不是屬性,調用者更可能假設他們的數據正在被*處理*而不是簡單地被存儲。 – 2010-07-10 19:06:59