680 likes | 876 Views
Tworzenie interfejsów do bazy danych z wykorzystaniem technologii ADO.Net. Obiektowe spojrzenie na bazę danych. Baza danych. Obiekt „BazaDanych”. Model logiczny bazy danych. Atrybuty obiektu. Procedury składowane. Metody obiektu. Wykonane. Interfejs „Form”.
E N D
Tworzenie interfejsów do bazy danych z wykorzystaniem technologii ADO.Net informatyka +
Obiektowe spojrzenie na bazę danych Baza danych Obiekt „BazaDanych” Model logiczny bazy danych Atrybuty obiektu Procedury składowane Metody obiektu
Wykonane Interfejs „Form” Wykonaj przelew z konta A na konto B SQLServer Środowisko śieciowe 1.Zapytanie o stan konta A 2.Odpowiedź – stan Konta A 3.Rozpoczęcie transakcji 4.Odpowiedź na polecenie 5.Zmiejszenie stanu konta A 6.Odpowiedź na polecenie 7.Zwiekszenie stanu konta B 8.Odpowiedź na polecenie 9. Zakończenie transakcji 10.Odpowiedź na polecenie
A teraz inne podejście ????????????
Metoda „WykonajPrzelew” Iterfejs „Form” SQL Server Wykonane Środowisko śieciowe Wykonaj przelew z konta A na konto B 1.Wykonaj metodę „…Przelew” 2.Odpowiedź z metody
Dostęp do baz danych(.NET Framework 3.5) informatyka +
Wymagania wstępne • Podstawowa znajomość Visual Studio (.NET 2003, 2005 lub 2008) • Podstawowa znajomość języka C# • Podstawowa znajomość serwera baz danych MS SQL Server (2000, 2005, 2008) • Szczere chęci do nauki ;-) informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
Architektura aplikacji • Nie ma architektury doskonałej • Nie ma doskonałego procesu wytwórczego • Każde z podejść sprawdza się różnie w różnych projektach “We know why projects fail, we know how to prevent their failure -- so why do they still fail?” Martin Cobb "Wiemy, dlaczego projekty upadają, wiemy jak zapobiec tym upadkom – więc dlaczego one ciągle upadają ?" informatyka +
Architektura aplikacji • Kilka „oczywistych oczywistości” : • Dostęp do danych jest uzyskiwany praktycznie w każdej aplikacji. • Zwykle, jako ze źródła danych, korzysta się z bazy danych • W kodzie aplikacji, jego znaczna część dotyczy pobierania/modyfikowania danych • Po wdrożeniu aplikacji pojawia się konieczność jej rozwijania i ulepszania informatyka +
Architektura aplikacji c.d. • W ciągu kilkudziesięciu ostatnich lat wypracowano cały szereg dobrych praktyk dotyczących zarówno samego procesu wytwarzania oprogramowania jak i planowania jego architektury • W ramach wykładu zajmiemy się małym fragmentem tej dziedziny • W praktyce ważne jest znalezienie rozsądnego kompromisu pomiędzy planowaną architekturą aplikacji, a czasem potrzebnym na jej zastosowanie i celowością korzystania z niej w konkretnej sytuacji WYMAGANIE: „Ma zapewnić ochronę przed deszczem” Który wariant wybrać ??? informatyka +
Architektura aplikacji c.d. • Skupmy się na typowej, prostej architekturze warstwowej informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
Architektura aplikacji c.d. • „Jedyną stałą rzeczą w projekcie są zmiany” • Aby uniknąć problemów przy rozbudowie i modyfikowaniu aplikacji: • należy dobrze zdefiniować jakie operacje będą wykonywane na danych (interfejs warstwy dostępu do danych) • należy wydzielić kod odpowiedzialny za przekazywanie poleceń do bazy danych i odbieranie od niej rezultatów • w takim przypadku, aplikacja nie musi znać żadnych szczegółów (z jaką bazą się łączyć, jakie zapytanie wykonać, z jakiej procedury składowanej skorzystać itp..) • łatwiej jest szacować nakład pracy potrzebny na implementację informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
Jak skorzystać z bazy danych? • .NET Framework 3.5 oferuje kilka interfejsów pomocnych przy komunikowaniu się z bazami danych. Klasy implementujące te interfejsy pełnią następujące role: • IDbConnection • odpowiedzialna za zdefiniowanie i zarządzanie połączeniem z bazą danych • IDbCommand • odpowiedzialna za zbudowanie polecenia, które będzie wysłane do bazy danych za pośrednictwem połączenia • IDataReader • umożliwia odbieranie rezultatu wykonania polecenia przez bazę danych • IDbParameter • pozwala na definiowanie parametrów polecenia przekazywanego do bazy danych, lub odbierania wartości parametrów wyjściowych • IDataAdapter • pozwala na zdefiniowanie operacji CRUD (Create, Read, Update, Delete) dla określonej tabeli w bazie danych informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
Na początek… • Potrzebujemy pomysłu na przykładową aplikację bazodanową… • …Są jakieś? • …i tak nie mamy dość czasu, żeby je przedyskutować ;-) • W takim razie proponuje skorzystać z wcześniej przygotowanego: Dzienniczek Ucznia informatyka +
Wymagania stawiane aplikacji Dzienniczek ucznia ma umożliwiać: Wyświetlenie listy uczniów Wystawienie oceny ucznia z wybranego przedmiotu Wyświetlenie średniej arytmetycznej ze wszystkich ocen ucznia Wyświetlenie listy wszystkich ocen ucznia Wyświetlenie listy ocen uczniów z wybranego przedmiotu informatyka +
Struktura aplikacji Przygotowane zostało rozwiązanie (solution) zawierające projekty niezbędne do zademonstrowania funkcjonowania aplikacji i mechanizmów dostępu do danych. informatyka +
Warstwa prezentacji informatyka +
Warstwa biznesowa informatyka +
Klasy warstwy biznesowej informatyka +
Definicja interfejsu IStudentNotesDB • definiuje operacje, które będą wykonywane na danych • korzysta z interfejsu IDataReader • Jest podstawą do budowania implementacji warstwy dostępu do danych informatyka +
Diagram bazy danych • skrajnie proste rozwiązanie • zawiera przykładowe procedury składowane informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
Metoda „na piechotę” Komunikacja z baza danych (typowy scenariusz): Utworzenie połączenia z bazą (SqlConnection) Utworzenie polecenia do wykonania (SqlCommand) Otwarcie połączenia Wykonanie polecenia (ExecuteReader(), ExecuteScalar(), ExecutenonQuery()) Przetworzenie wyników (iteracja po SqlDataReader) Zamknięcie połączenie informatyka +
Metoda „na piechotę” – ogólna koncepcja informatyka +
Metoda „na piechotę” – praktyczne rozwiązanie informatyka +
Metoda „na piechotę” – zwrócenie SqlDataReadera Parametr CommandBehavior.CloseConnection pozwala na zwrócenie obiektu SqlDataReader, który automatycznie zamknie połączenie z bazą gdy zostanie wykonana jego metoda Close(). informatyka +
Metoda „na piechotę” – korzystanie z parametrów • zamiast parametrów można po prostu „skleić” fragmenty polecenia wplatając w odpowiednie miejsca wartości parametrów. Jest to jednak NIEBEZPIECZNE i może być wykorzystane do przeprowadzenia ataku typu SQL Injection • korzystanie z parametrów eliminuje większość takich zagrożeń informatyka +
Metoda „na piechotę” – korzystanie z parametrów • najwygodniej jest skorzystać z procedury składowanej • można używać parametrów wejściowych, wyjściowych oraz korzystać z wartości zwracanej (return value) informatyka +
Metoda „na piechotę” – SchoolController informatyka +
Metoda „na piechotę” – aplikacja desktopowa • Ilość kodu niezwiązanego z logiką aplikacji (obsługa zdarzeń, sterowanie zachowaniem kontrolek itp.) jest minimalna i sprowadza się do wywołania metody obiektu controller. • Aplikacja nie ma i nie musi mieć żadnych informacji na temat sposobu uzyskania dostępu do bazy danych. informatyka +
Metoda „na piechotę” - podsumowanie • Kod budowany w oparciu o stałe szablony • Łatwo popełniać błędy • Bez korzystania z procedur składowanych – silna zależność od struktury bazy i zapytań • Wielokrotne powtarzanie tego samego kodu różniącego się niewielkimi fragmentami • Korzystanie z tego sposobu niechybnie prowadzi do wniosku, że można by to nieco uprościć (poprzez tworzenie uogólnionych metod) informatyka +
Metoda „na piechotę” – podsumowanie cd. • NIE TRZEBA JEDNAK TEGO ROBIĆ! • Wielu ludzi wpadło na ten pomysł wcześniej i często udostępniają swoje wynalazki innym. • Najlepiej jednak korzystać ze sprawdzonych, przemyślanych i dobrze udokumentowanych rozwiązań – jeżeli trafimy na problem, to istnieje spora szansa, że już ktoś się z nim spotkał i znalazł rozwiązanie. informatyka +
Metoda „na piechotę” – podsumowanie cd. • Nie korzystaliśmy z klas DataSet, SqlDataAdapter, TableAdapter – są to rozwiązania opisane w każdej książce i najprostszym tutorialu dotyczącym dostępu do danych w .NET. • Pozornie są one wygodne i szybko da się „wyklikać” w ten sposób gotowy mechanizm, ale szybko okazuje się, że jest on niezbyt wydajny, nadaje się tylko do typowych rozwiązań i trudno go modyfikować. informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
DAAB – koncepcja Źródło:Dokumentacja DAAB informatyka +
DAAB – tworzenie kodu dostępu do danych • Typowy scenariusz komunikacji z bazą: • Utworzenie instancji klasy Database • Wywołanie metody utworzonej instancji • Cechy rozwiązania: • Nie trzeba martwic się o otwieranie i zamykanie połączeń • Nie trzeba martwić się o definiowanie parametrów (czasem trzeba…) • Zwięzły i czytelny kod • Odporność na błędy – wbudowana obsługa • Szczególnie wygodne rozwiązanie przy korzystaniu z procedur składowanych informatyka +
DAAB – tworzenie kodu dostępu do danych cd. Przykładowy kod programu: informatyka +
DAAB – konfigurowanie aplikacji • DAAB można konfigurować za pomocą wygodnego narzędzia • Otwiera się w nim plik konfiguracyjny aplikacji • Po „wyklikaniu” konfiguracji narzędzie tworzy odpowiednie wpisy w pliku konfiguracyjnym aplikacji • na podstawie tych wpisów klasa DatabaseFactory tworzy odpowiednie obiekty i konfiguruje je do komunikacji z właściwą bazą informatyka +
DAAB – konfigurowanie aplikacji cd. Elementy konfigurowania informatyka +
DAAB – konfigurowanie aplikacji cd. Wygenerowany dokument XML informatyka +
DAAB – zmiany w aplikacji • Żeby skorzystać z nowej implementacji warstwy dostępu do danych wystarczy: • dodać do aplikacji referencję do projektu zawierającego kod dostępu do danych • zmodyfikować plik konfiguracyjny aplikacji za pomocą narzędzia Enterprise Library Configuration • W klasie SchoolController zmodyfikować konstruktor informatyka +
DAAB – podsumowanie • Znaczne uproszczenie kodu • Poprawa wydajności • Spójna obsługa błędów • Wygodna konfiguracja • Bogata dokumentacja i wsparcie • http://msdn.microsoft.com/en-us/library/cc467894.aspx informatyka +
Agenda • Architektura aplikacji korzystających z baz danych • Jaką architekturę wybrać i kiedy? • Na co zwrócić uwagę, żeby później nie pluć sobie w brodę? • Co oferuje .NET Framework w zakresie dostępu do danych? • Planowanie i implementacja warstwy dostępu do danych • Metoda „na piechotę” • Data Access Application Block (Enterprise Library) • LINQ to SQL • mało? ... krótki przegląd innych możliwości • Podsumowanie i wnioski informatyka +
LINQ to SQL – wprowadzenie • LINQ – Language Integrated Query • Język zapytań zostaje wbudowany w języki programowania • Programista nie martwi się szczegółami i niezależnie od źródła danych używa tej samej składni LINQ w celu budowania zapytań i manipulowania danymi • Istnieje kilka wariantów LINQ przeznaczonych do współpracy z różnymi źródłami danych • LINQ to SQL współpracuje TYLKO z SQL Server 2005 lub 2008 informatyka +
LINQ to SQL – architektura informatyka +