對像數據源或程式碼隱藏:哪個更好?
我知道這是一個會引起很多爭論的話題,但我想知道人們認為使用對像數據源的各種利弊是什麼。我現在正在和另一個程序員一起做一個項目,他的經驗和舒適度都植根於經典的 ASP,我不確定哪種方式會
a) 快速完成工作 b) 以最少的方式完成工作大驚小怪的
我們有一個很好的儲存庫層,其中包含能夠自我驗證的域對象,因此可以使用這些方法來執行 ODS 綁定或程式碼隱藏綁定。
出於大多數顯而易見的原因,我不喜歡 ODS,但如果它確實讓我不必手動編碼分頁/排序/選擇/插入/更新/刪除場景,那麼它真的會那麼糟糕嗎?
對像數據源非常適合小型項目,但它們不能很好地擴展,因為您將數據層資訊嵌入應用程序的 UI 層。我建議您僅將它們用於非常小的應用程序和便箋式測試的東西。如果您做出使用它們的設計決定,請準備好在未來解決擴展和維護問題。
DataSourceControls 的最大好處是它們抽象了對 .NET 生命週期的幾個關注點,同時提供了對完整 CRUD 和雙向數據綁定表達式的支持,即 <%# Bind(“FirstName”) %>(但是 2 向數據綁定確實有點糟糕,所以你可能不會錯過任何東西)。作為一種設計模式,使用平庸的實現(很像 WebForms 本身)是一個非常好的主意。
如果您禁用視圖狀態並發現自己試圖弄清楚為什麼您的回發沒有被處理,或者您最終不得不在多個地方呼叫 DataBind(),數據源可以消除一些令人頭疼的問題,因為 DataBoundControls 足夠聰明知道他們什麼時候需要數據,而他們只是從數據源中需要它。不需要 DataBind() 呼叫。
數據源還提供了一種處理排序、過濾和分頁的好方法。大多數開發人員在使用程式碼隱藏時通常不會進行分頁,而是最終從數據庫返回大量結果集。
數據源的缺點是沒有很多好的實現。通常你最終將你的 Web UI 綁定到你的持久性實現(即 SqlDataSource、LinqDataSource 等),或者你最終使用 ObjectDataSource,這很糟糕,因為它非常有限,需要你將類名和方法名硬編碼到你的 ASPX ,並且使用反射有些低效。因此,它對使用依賴注入或靜態 DAO 類的人沒有用處。這是一門構思拙劣的課程,似乎是 MS 的事後才想到的。
就我個人而言,我更喜歡使用 DataSources 和程式碼隱藏。使用 DataSource 消除生命週期/視圖狀態問題,然後在程式碼隱藏中為其提供“選擇”事件/委託。不幸的是 ObjectDataSource 只能使用反射,但是您可以輕鬆編寫自己的實現。我有我自己的一個,但它不公開。但是在我寫之前我使用了這個,它彌補了 ObjectDataSource 的一些不足:
http://mikeoff.blogspot.com/2006/06/objectdatasource-working-alternative.html