我已經閱讀了有關POCO在Enttity框架中的一些文章,但仍不明白我可以使用它。 POCO如何使我的項目受益?我可以使用POCO做什麼?
回答
「普通舊Clr對象」的POCO標準。它指的是一種ORM體系結構,其中用於持久化和加載數據存儲中的數據的所有工作都由系統完成,而對象本身不知道正在發生什麼。這意味着ORM可以完全支持沒有以任何方式修改ORM的對象。支持POCO持久化的ORM不要求你的類從任何特定的基類繼承,實現任何接口,甚至標記具有任何屬性的方法。與此完全相反(有時稱爲數據訪問對象 - 或DAO)是當所有存儲都由對象本身處理時,它完全知道如何序列化和存儲自身以及如何在需要時加載自身。在這種情況下,對象應該純粹用於傳輸數據,而不應表示系統的任何業務邏輯。
實際上,這兩個情況在任何一端都是更多的光譜。許多ORM位於中間的某個位置,需要持續性在課堂外部進行處理,但通常還需要在課程上實施一些元數據或接口以幫助解決問題。
EF(v1)不支持POCO。對象必須實現各種接口(以提供屬性值更改通知等)以便框架可持久化。我相信有addon frameworks試圖增加對EF的POCO支持,但我不知道它們有多成功。 EF in .net 4.0將擁有POCO支持。
POCO通常被認爲是好的,因爲它允許關注的強烈分離。您可以定義您的數據對象,以便完全不知道將用於存儲它們的機制。 (因此,將來可以輕鬆地將存儲機制轉換爲不同的東西)。這也意味着您不必考慮用於存儲數據庫/框架的數據對象來設計數據對象。
我相信你對DTO的定義是錯誤的 - 它們應該和POCO/POJO很相似。 DTO是一種無行爲的存儲對象。 也許你正在考慮DAO(數據訪問對象)? – 2009-10-29 23:44:16
@Bryan:是的,謝謝= :) – 2009-10-29 23:48:43
POCO只是「普通舊CLR對象」。這只是一個標準課程,任何標準課程。
就EF而言,人們指的是能夠配置EF來將自己的類(不是由EF直接生成)存儲到數據庫中。
POCO是設計用於在您的應用程序內傳輸數據的類(即將數據從數據層移動到UI層)。它們還將應用程序的結構與數據庫的架構分離。
在小型項目上這不是什麼大問題,但隨着項目的發展,對象模型(您如何設計POCO)往往偏離數據庫模式。
.NET中通常使用的其他方法是DataTable和DataSet。通常使用列名稱檢索數據。這會讓你在數據庫中做列名。如果數據庫中的列名發生更改,則代碼中斷。
我很不喜歡把POCO叫做DTO。抱歉。 :) – 2009-10-29 23:30:47
POCO只是一個普通的類,沒有添加接口或基類來使它與數據庫層(在這種情況下)一起工作。
優點是: 1)不依賴於特定的數據庫層,所以你可以將它換成一個更好的(即NHibernate),而不需要修改除數據庫層之外的其他任何東西。
2)它更容易對單元測試你的類。 3)沒有鍋爐板代碼來通知當財產已經改變等只是簡單的getter和setter。
Idealy你的域對象是從ORM加載,而不必在它是如何加載,變化是如何跟蹤任何表示或對象它是如何保存等
NHibernate的在這做了很好的工作,唯一的要求是你必須使所有的屬性/方法變成虛擬的,這比任何硬性依賴關係都要好很多。
- 1. 我可以使用該scrollviewer做什麼?
- 2. 我不能用keytool做什麼,我可以用OpenSSL做什麼?
- 3. Komodo Macro可以做什麼,如果可以,我該怎麼做?
- 4. 我們可以使用UCWA API(Lync)做什麼?以及我們無法使用UCWA API做什麼?
- 5. 我爲什麼要使用POCO?
- 6. 我可以做什麼類的knockout.js
- 7. 你可以用grep來做什麼,你可以用egrep做什麼?
- 8. 使用日期時,我可以用零值做什麼?
- 9. 什麼是web.xml文件,我可以用它做什麼?
- 10. 你無法用Angular.js做什麼,你可以用jQuery做什麼
- 11. 我可以使用我的應用以外的plist文件做什麼?
- 12. 我們還可以使用Android M的指紋API做什麼?
- 13. 使用jdbcTemplate,我可以做些什麼來測試連接性?
- 14. 爲什麼該查詢這麼慢,我可以做些什麼
- 15. VPS可以做什麼?
- 16. webkit可以做什麼?
- 17. Merlin Agent可以做什麼?
- 18. 在NS2中可以做什麼以及不能做什麼?
- 19. 什麼是MD5CryptoServiceProvider,它可以做什麼?
- 20. R的class.ind()函數做什麼?我什麼時候可以使用它?
- 21. 我可以用Windows 8開發者許可證來做什麼?
- 22. 我可以用我的舊iPhone做什麼
- 23. 我可以知道什麼requireGestureRecognizerToFail會做什麼?
- 24. 有人可以告訴我我可能會做錯什麼
- 25. 人們可以用javascript做些什麼?
- 26. 你可以用AppleScript做什麼?
- 27. 作爲OpenShift用戶可以做什麼?
- 28. 爲什麼當我在primefaces中使用fileupload時,我可以做ajax調用?
- 29. 我什麼時候可以使用Task.Yield()?
- 30. CursorAdapter有什麼我可以使用的?
一個POCO或多或少只是一個簡單的類來重新從數據庫中的數據換句話說它的DC(數據容器) – Peter 2009-10-29 23:21:12