我來自一個有利於構建自己的世界,而不是依賴其他人構建的庫和框架。逃離這個世界之後,我發現在Visual Studio中使用類型化數據集等工具的喜悅和方便。所以除了失去靈活性之外,你還失去了什麼?是否有性能因素(不考慮過程與動態sql辯論)?限制?Typed DataSet有什麼缺點
回答
通過類型化數據集改善了無類型數據集的性能(儘管我從來沒有發現性能問題與像這樣值得擔心的微不足道的事情)。
我想說最大的麻煩就是讓它們與你的數據庫保持同步 - 我不能說VS 2008,但以前的版本並不能提供很好的支持。每次結果集的模式更改時,我都會將proc拖到設計器上。不好玩。
但是,你確實得到了編譯時類型檢查,這很棒,而且像Customer.Name而不是Dataset.Tables(0).Rows(0)(「Name」)。
所以,如果你的模式是相對靜態的,他們可能是值得的,但除此之外,我不會理會。
你也可以看看一個真正的ORM。
輸入數據集沒有問題。它們並不完美,但它是解決對象關係阻抗不匹配問題的下一步。我面臨的唯一問題是對模式更改的支持不足。部分班級可以提供幫助,但不是在任何情況下。
我只給了打字數據集一個很短的嘗試。當我發現我的代碼破壞了生成代碼的1,000多行文件的2/3時,我停下了腳步。
我不喜歡的另一件事是我想我會編寫像Customer.Name這樣的代碼,但默認情況下,我似乎獲得像CustomerDataSet.Customers [0] .Name這樣的代碼,其中Customers [0]是CustomersRow類型的。仍然比無類型數據集更好閱讀,但不是我正在尋找的語義。
就我個人而言,我開始沿着ActiveRecord/NHibernate的路線走了,從此以後就沒有回頭看過。
我會延伸的主要批評是,與輕量級業務實體或DTO或LINQ to SQL相比,當您遇到更多事務時,它們不會擴展性能良好的性能損失。模式更改也令人頭痛。對於「工業強度」體系結構,它們可能不是要走的路,從長遠來看它們會導致問題。
我仍然一定會將它們用於快速和髒的PoC或簡單的實用程序 - 它們非常方便在Visual Studio中使用工具,並完成工作。
類型化數據集是目前從傳統ADO斷開連接的記錄世界的升級。我發現,在需要執行一些面向行的排序任務的簡單情況下,即仍然希望在行,列,約束等數據庫範例的上下文中工作時,它們仍然很好用。如果在這種情況下明智地使用,那麼你很好。
在有些情況下他們的福利減少的幾個方面:
- 我想長大的同步問題在這裏已經是肯定有問題,特別是如果你已經走了,他們的定製或使用它們作爲一個基類。
- 根據數據集中數據表的數量,它們可以變得相當脂肪。我的意思是說,多表數據集通常呈現數據的關係視圖。除此之外,除了內存中的空間外,還有關鍵字的定義和潛在的其他約束。同樣,如果這就是你需要的優點,但是如果你需要快速遍歷數據,那麼有一次使用數據讀取器的高效循環可能是更好的選擇。
- 由於其複雜的定義和潛在的規模,在遠程處理情況下使用它們也不好。
- 最後,當你開始意識到你需要處理與問題領域相關的對象中的數據時,它們的使用變得更加困難而不是益處。你總是發現自己將字段移入和移出集合中的行表,並且關注表和行的狀態。您開始意識到,他們使OO語言更容易代表真實世界的問題域對象,而使用表,行和列的工作並不適合這種思維方式。 在我的經驗
一般來說,我發現,複雜的系統(如許多大型企業系統),最好還是從使用的數據集和更多的移開邁出了堅實特定領域對象模型 - 你如何讓你的數據進出這些對象(例如使用ORM)完全是另一個話題。然而,在需要進行基本維護和其他一些簡單操作的數據前面有一種形式的小型項目中,數據集範例可以實現極高的生產力 - 尤其是在與Visual Studio/.Net強大的數據綁定功能結合使用時。
如果忽略之前提到的所有問題,數據集對於快速將視覺工作室與某些東西進行拍打很好。我沒有看到的一個問題是Visual Studio設計表面中數據集的可視化可伸縮性。隨着系統的增長,數據集的大小不可避免地變得笨重。設計師的視覺方面根本不會縮放。當數據集有超過20個表格時,滾動試圖查找特定的表格或關係是一件非常痛苦的事情。
我不喜歡打字數據集。我無法通過使用類型化數據集來提高性能。它純粹是對現有數據庫對象的包裝。我不能考慮像employee.empName這樣的訪問。鑄造仍然在包裝中完成。另一個開銷是巨大的代碼塊。 LOC增加。內存中有很多活動對象。沒有模式的自動更新。以任何方式輸入的數據集對於開發人員來說都是無用的,除了它提供的舒適性。作爲一名開發人員,我們沒有任何權利要求安慰:)以痛苦...從用戶的痛苦:)
- 1. Typed DataSet引發的SqlDateTime溢出插入
- 2. ConcurrentHashMap有什麼缺點嗎?
- 3. Apache Wicket有什麼缺點?
- 4. std :: reverse_iterator有什麼缺點?
- 5. VistaDB有什麼缺點
- 6. H264有什麼缺點?
- 7. has_many和has_one,有什麼優點/缺點?
- 8. 使用Maven有什麼優點/缺點?
- 9. py2exe有什麼優點/缺點
- 10. 有很多指數有什麼缺點?
- 11. static :: vs. self :: - 有沒有什麼缺點?
- 12. 一致散列有什麼缺點嗎?
- 13. 使用android有什麼缺點:largeHeap =「true」?
- 14. C++中dynamic_cast有什麼缺點?
- 15. PHP APC模塊。有什麼缺點?
- 16. 單身模式有什麼缺點嗎?
- 17. 丟棄符號有什麼缺點?
- 18. 使用SOAP服務有什麼缺點?
- 19. 使用git-svn有什麼優缺點?
- 20. 使用SqlServer視圖有什麼缺點?
- 21. 使用StringBuilder有什麼缺點?
- 22. Joomla - wrapper |有什麼缺點嗎?
- 23. 啓用git rerere有什麼缺點嗎?
- 24. 使用NewSequentialID有什麼缺點嗎?
- 25. HTML編碼有什麼缺點嗎?
- 26. 使用AVL樹有什麼缺點?
- 27. 冗餘限定符有什麼缺點嗎?有什麼好處?
- 28. Spark DataSet和RDD有什麼區別
- 29. SqlBulkCopy的缺點是什麼
- 30. TableAdapterManager的缺點是什麼?
個人,我認爲你最後的要點是緊要關頭:'他們使OO語言使代表[真實世界問題領域]變得更容易「。公平地說,隨着部分類的引入,您的第一點已經略微緩解,允許每次刷新數據庫時都不會被吹走的表和行定製。 不過,我只會將它們用於最簡單的富客戶端應用程序,其中性能被視爲「硬件問題」。 – 2010-04-19 05:13:01