簡體   English   中英

對象數據源或代碼隱藏:哪個更好?

[英]Object datasource or code-behind: which is better?

我知道這是一個可以引起很多爭論的主題,但我想知道人們認為使用對象數據源的各種利弊是什么。 我正在做一個項目,現在有另一個程序員,他的經驗和舒適程度都源於經典的ASP,我不確定哪種方式會
a)快速完成工作b)以最小的麻煩完成工作

我們有一個很好的存儲庫層,其域對象能夠自我驗證,因此這些方法可用於執行ODS綁定或代碼隱藏綁定。

我出於大多數顯而易見的原因而不喜歡ODS,但如果它確實使我不必手動編碼分頁/排序/選擇/插入/更新/刪除方案,那么它真的會那么糟糕嗎?

對象數據源適用於小型項目,但由於您在應用程序的UI層中嵌入數據層信息,因此它們無法很好地擴展。 我建議您只將它們用於非常小的應用程序和便箋式測試。 如果您做出設計決定使用它們,請准備好在將來解決擴展和維護問題。

DataSourceControls的最大好處是它們消除了對.NET生命周期的一些擔憂,同時提供對完整CRUD和雙向數據綁定表達式的支持,即<%#Bind(“FirstName”)%>(但是雙向數據綁定)有點吮吸所以你可能不會錯過任何事情)。 作為一種設計模式,使用平庸的實現(很像WebForms本身)是一個非常好的主意。

如果您禁用viewstate並發現自己試圖弄清楚為什么沒有處理回發,或者您最終不得不在幾個地方調用DataBind(),那么數據源可以帶走一些令人頭疼的問題,因為DataBoundControl足夠聰明知道他們什么時候需要數據,他們只需要從數據源中獲取數據。 沒有必要的DataBind()調用。

DataSources還提供了處理排序,過濾和分頁的好方法。 大多數開發人員在使用代碼隱藏時,通常不進行分頁,而是最終從數據庫返回大量結果集。

數據源的缺點是沒有很多好的實現。 通常你最終將你的web UI綁定到你的持久性實現(即SqlDataSource,LinqDataSource等),或者最終使用ObjectDataSource,因為它非常有限,需要你將類名和方法名硬編碼到ASPX中,使用反射效率有點低。 因此,它對使用依賴注入或靜態DAO類的人沒有用。 這是一個非常糟糕的課程,看起來幾乎就像是MS的事后想法。

我個人更喜歡使用DataSources和代碼隱藏。 使用DataSource消除生命周期/視圖狀態的問題,然后在代碼隱藏中為其提供“選擇”事件/委托。 不幸的是,ObjectDataSource只能使用反射,但您可以輕松編寫自己的實現。 我有自己的一個,但它不公開。 然而在我寫它之前我使用了它,這彌補了ObjectDataSource的一些不足之處:

http://mikeoff.blogspot.com/2006/06/objectdatasource-working-alternative.html

您越來越熟悉使用的底層ADO.NET框架,您將越來越少地依賴Visual Studio打包的數據源控件。 我在我工作的前幾個.NET項目中虔誠地使用它們,但我很快發現,只使用連接和檢索數據庫上的數據的基礎知識比依靠.NET來制作數據要好得多。最好的嘗試為我做這件事。

我或多或少地將它們視為訓練輪,讓您或多或少地熟悉數據綁定的生命周期。

與WebForms中的任何其他xxxDatasource一樣,ObjectDatasource是大型應用程序(或較小應用程序上的數據訪問層)上的業務層與控件本身之間的協調器。

它只是為應用程序的可視部分提供數據和其他功能,用戶界面由您在數據存儲中的視圖驅動。

人們應該將這些控件視為UI內容的請求和響應,並停止濫用或完全丟棄它們。 它們不是DAL,它們不是邪惡的,它們只是連接到您的數據源,控制知道如何高效地說話。

例如,如果您有一個基於決策變化其源的數據網格,那么應該配置兩個ObjectDatasources,並且該決策應該駐留在頁面中,而不是ObjectDatasource。 這是使用它們的首選方法,並避免人們試圖在其他響應中引用的問題。

就個人而言,我認為這取決於項目。 如果它是一個帶有幾頁的小型CRUD應用程序,那么綁定到對象數據源可能會快速,簡單,並且幾乎沒有后果。

如果它是具有定制需求的大規模應用程序,那么您可能會發現嘗試使對象數據源滿足這些特定需求是令人沮喪的。

在我看來,兩者都有自己的位置,優勢和劣勢。 節省編碼你提到的元素的時間,特別是分頁和排序,是很有幫助的,但是如果你想對它們做任何遠程有趣的事情,它們很快就會變得很難處理。

當數據嚴格用於顯示時,我使用ODS。 在數據網格,ODS中進行操作,您就完成了。 但如果需要以任何方式操縱這些數據,我會遠離所有內置部件,沒有網格,沒有ODS。

我認為通常,代碼隱藏更有用,因為它提供了自定義數據層連接的中心位置。 只要將操作划分為不同的層,后面的代碼就可以非常靈活。

另一方面,自定義對象數據源非常有用,因為它允許與GridView控件進行固有綁定。 自定義對象數據源提供的數據集允許輕松排序和分頁。 自定義對象還為數據層訪問提供了一個中心位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM