2009-05-19 13 views
10

Wiem, że jest to temat, który może wzbudzić wiele dyskusji, ale chciałbym wiedzieć, co ludzie sądzą o różnych zaletach i wadach korzystania z Object Datasources. Robię teraz projekt z innym programistą, którego doświadczenie i poziom komfortu są zakorzenione w klasycznej ASP, i nie jestem pewien, która droga będzie
a) szybko wykonam zadanie b) załatw pracę z minimalnym zamieszaniemŹródło danych obiektu lub jego kod: co jest lepsze?

Mamy ładną warstwę repozytorium z obiektami domeny zdolnymi do samooceny, więc istnieją metody, które umożliwiają wykonanie powiązania ODS lub powiązania kodu.

Nie lubię ODS z większości oczywistych powodów, ale jeśli to mnie uratuje od ręcznego kodowania stronicowania/sortowania/wyboru/wstawiania/aktualizowania/usuwania scenariuszy, to czy naprawdę może być tak źle?

Odpowiedz

10

Źródła danych obiektów są dobre dla małych projektów, ale nie są skalowane, ponieważ osadzają informacje warstwy danych w warstwie interfejsu aplikacji. Sugerowałbym, żebyś używał ich tylko w bardzo małych aplikacjach i testach na scratch-pad. Jeśli podejmiesz decyzję projektową, aby z nich skorzystać, przygotuj się do walki z problemami skalowania i konserwacji w przyszłości.

0

Osobiście uważam, że to zależy od projektu. Jeśli jest to mała aplikacja CRUD z kilkoma stronami, powiązanie ze źródłem danych obiektu będzie prawdopodobnie szybkie, łatwe i będzie miało niewielkie konsekwencje.

Jeśli jest to aplikacja na dużą skalę z dopasowanymi potrzebami, może się okazać, że frustrująca jest próba dopasowania źródła danych obiektu do tych konkretnych potrzeb.

+0

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)! –

3

Im lepiej poznasz podstawowy system ADO.NET, tym mniej będziesz mógł polegać na sterowaniu źródłami danych, które są spakowane w Visual Studio. Używałem ich religijnie w pierwszych kilku projektach .NET, nad którymi pracowałem, ale szybko odkryłem, że znacznie lepiej byłoby po prostu korzystać z podstaw łączenia i pobierania danych z bazy danych, niż polegałem na .NET, najlepsza próba zrobienia tego dla mnie.

Patrzę na nie mniej więcej jako kółka szkoleniowe, aby lepiej poznać cykl życia introligatora.

+0

Mam takie samo doświadczenie z nimi, ale dang, jeśli nie sprawiają, że proste przypadki tak łatwe! Pokusa jest trudną kochanką. –

+0

Josh E: To zależy od twojej ogólnej prędkości, jak sądzę. Doszedłem do punktu, w którym kontrola nad danymi źródłowymi kończy się dłużej niż wyrzucenie kodu ado.net dla tego samego. A nawet lepiej, wykorzystaj swoją wiedzę o ado.net, aby skonfigurować własną warstwę dostępu do danych, którą możesz wykorzystać w różnych aplikacjach. Zmniejsza również znacznie czas. – TheTXI

+1

cóż, mówię tylko o źródle danych obiektu, więc mam już zaimplementowaną wersję DAL przy użyciu wzorca repos.Słyszę cię, jeśli chodzi o SQL DS, ale tak nie jest w tym przypadku - kod DA jest poprawnie ukryty przed widokiem i już zaimplementowany :) –

0

Moim zdaniem oba mają swoje miejsce, swoje mocne i słabe strony. Czas zaoszczędzony na kodowaniu elementów, o których wspominasz, w szczególności na stronicowaniu i sortowaniu, to duża pomoc, ale jeśli chcesz zrobić z nimi coś zdalnie interesującego, szybko stają się bolesne.

Używam ODS, gdy dane będą używane wyłącznie do wyświetlania. Uderz w siatkę danych, ODS i gotowe. Ale jeśli dane muszą być w jakikolwiek sposób zmanipulowane, trzymam się z daleka od wszystkich wbudowanych elementów, bez siatki, bez ODS.

0

Ogólnie uważam, że kodowanie jest bardziej użyteczne, ponieważ zapewnia centralną lokalizację dostosowywania połączeń z warstwą danych. Dopóki dzielisz akcję na różne warstwy, kod może być bardzo skalowalny.

Z drugiej strony, źródła danych obiektów niestandardowych są bardzo przydatne, ponieważ umożliwiają nieodłączne powiązanie z kontrolką GridView. Zestaw danych dostarczony przez źródło danych obiektu niestandardowego pozwala na łatwe sortowanie i stronicowanie. Obiekt niestandardowy zapewnia również centralną lokalizację dostępu do warstw danych.

+0

To jedna z głównych wad przy użyciu deklaratywnego wiązania danych jak ODS - to umieszcza logikę w prezentacji, której prawdopodobnie nie powinno tam być. Po prostu nienawidzę kodowania rzeczy, których nie potrzebuję, i zawsze walczę z tym uczuciem dzięki wykrywaniu danych w formularzach internetowych i kontrolach źródła danych. –

+1

Mówię o źródle danych obiektu niestandardowego, a nie o ODS z VS. Niestandardowe segmenty ODS umieszczają logikę w innym pliku klasy, a zatem wiele obiektów prezentacji może wiązać się z tym jednym segmentem ODS. – johnofcross

7

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

+0

Dzięki za spostrzeżenia dotyczące ObjectDataSource! – Marcel

+0

dobrze powiedział Winston. Obecnie ponownie tworzę kilka stron w gigantycznej aplikacji do tworzenia formularzy internetowych, która korzysta z ObjectDataSources. W tej chwili nie mogę odbudować aplikacji w MVC, więc próbuję oczyścić trochę kodu spaghetti w świecie Webformów ze stałymi zmianami zakresu i długimi błędami runtime, które mają warstwy bandaży. Chwiejny fundament. – JoshYates1980

0

ObjectDataSource jak każdy inny xxxDatasource w WebForms jest koordynatorem między warstwy biznesowej na dużych aplikacji (lub warstwa dostępu do danych na mniejsze) i same kontrole.

To tylko dostarczanie danych i innych funkcji do wizualnej części aplikacji, interfejs użytkownika oparty na widokach w magazynie danych.

Użytkownicy powinni widzieć te kontrolki jako żądania i odpowiedzi dotyczące rzeczy interfejsu użytkownika i przestać je nadużywać lub całkowicie je odrzucić. Nie są one DAL, nie są złe, są tylko połączeniami do źródeł danych, które kontrolują umiejętność mówienia bardzo sprawnie.

Jeśli masz na przykład siatkę danych, która zmienia jej źródło na podstawie decyzji, należy skonfigurować dwa źródła danych obiektu i ta decyzja powinna znajdować się na stronie, a nie w ObjectDatasource. Jest to preferowany sposób korzystania z nich i uniknięcia problemów, które ludzie próbują odnieść w innych odpowiedziach.

Powiązane problemy