Największa zaleta DataSourceControls polega na tym, że eliminują kilka problemów związanych z cyklem życia .NET, zapewniając jednocześnie obsługę pełnego CRUD i dwukierunkowego wyrażenia danych, tj.<% # Bind ("FirstName")%> (jednak 2-drożne wiązanie danych jest do niczego podobne, więc prawdopodobnie niczego nie tracisz). Jako wzorzec projektowy, jest to całkiem niezły pomysł ze średnią implementacją (podobnie jak sam WebForms).
Jeśli wyłączysz stan widoku i spróbujesz obliczyć, dlaczego nie są obsługiwane twoje posty zwrotne, lub musisz zadzwonić do funkcji DataBind() w kilku miejscach, źródła danych mogą zabrać trochę bólu głowy, ponieważ DataBoundControls są na tyle sprytne, aby wiedzieć, kiedy potrzebują danych i po prostu żądają tego od źródła danych. Brak wywołań DataBind().
DataSources to również dobry sposób na sortowanie, filtrowanie i stronicowanie. Większość programistów, gdy używają kodu źródłowego, zwykle nie robi stronicowania, a zamiast tego wraca z bazy danych ogromnych zestawów wyników.
Wadą źródeł danych jest to, że nie było wielu dobrych wdrożeń. Zwykle kończysz wiązanie swojego interfejsu WWW z implementacją trwałości (np. SqlDataSource, LinqDataSource, itp.) Lub w końcu korzystasz z ObjectDataSource, który jest do bani, ponieważ jest tak ograniczony, wymaga zawężonych nazw klas i nazw metod do twojego ASPXa i używa refleksji nieco nieefektywnie. Z tego powodu nie jest to przydatne dla osób stosujących wstrzyknięcia zależności lub statyczne klasy DAO. Jest to dość źle pomyślana klasa i wydaje się prawie jak spostrzeżenie przez MS.
Osobiście wolałbym używać źródeł danych i kodu źródłowego. Użyj źródła danych, aby usunąć ból głowy cyklu życia/widoku, a następnie udostępnij mu zdarzenie "Wybierz/delegowanie" w kodzie źródłowym. Niestety obiekt ObjectDataSource może używać tylko refleksji, jednak można łatwo napisać własną implementację. Mam jeden z moich, ale nie jest publiczny. Jednak zanim napisałem go użyłem tego, co stanowi dla niektórych niedoskonałości ObjectDataSource za:
http://mikeoff.blogspot.com/2006/06/objectdatasource-working-alternative.html
Jest to rodzaj aplikacji, dla której stworzono strukturę danych dynamicznych. Niestety używamy tylko wersji 2.0. To frustrujące, pisząc repozytorium i kodując DO, wiedząc, że zbawienie to tylko jedno kliknięcie w rozwijanym menu (do 3.5)! –