Tworzenie interfejsów do bazy danych z wykorzystaniem technologii ADO.Net
description
Transcript of Tworzenie interfejsów do bazy danych z wykorzystaniem technologii ADO.Net
Tworzenie interfejsów do bazy Tworzenie interfejsów do bazy danych z wykorzystaniem danych z wykorzystaniem
technologii ADO.Nettechnologii ADO.Net
2informatyka +
Obiektowe spojrzenie na bazę danych
Baza danych
Model logiczny
bazy danych
Procedury składowane
Obiekt „BazaDanych”
Atrybuty obiektu
Metodyobiektu
SQLServer
Interfejs „Form”
Środowiskośieciowe
Wykonaj przelew z konta A na konto B
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
Wykonane
A teraz inne podejścieA teraz inne podejście
????????????
SQL Server
Iterfejs „Form”
Środowiskośieciowe
Wykonaj przelew z konta A na konto B
Metoda „WykonajPrzelew”
1.Wykonaj metodę „…Przelew”
2.Odpowiedź z metody
Wykonane
Dostęp do baz danychDostęp do baz danych(.NET Framework 3.5)(.NET Framework 3.5)
7informatyka +
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 ;-)
8informatyka +
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
9informatyka +
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
10informatyka +
“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ą ?"
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
11informatyka +
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
12
WYMAGANIE:„Ma zapewnićochronę przed
deszczem”
Który wariant wybrać
???
informatyka +
Architektura aplikacji c.d.
• Skupmy się na typowej, prostej architekturze warstwowej
13informatyka +
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
14informatyka +
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ę
15informatyka +
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
16informatyka +
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
17informatyka +
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
18informatyka +
19
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:
informatyka +
20
Wymagania stawiane aplikacji
Dzienniczek ucznia ma umożliwiać:
1.Wyświetlenie listy uczniów
2.Wystawienie oceny ucznia z wybranego przedmiotu
3.Wyświetlenie średniej arytmetycznej ze wszystkich ocen ucznia
4.Wyświetlenie listy wszystkich ocen ucznia
5.Wyświetlenie listy ocen uczniów z wybranego przedmiotu
informatyka +
21
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 +
22
Warstwa prezentacji
informatyka +
23
Warstwa biznesowa
informatyka +
24
Klasy warstwy biznesowej
informatyka +
25
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 +
26
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
27informatyka +
28
Metoda „na piechotę”
Komunikacja z baza danych (typowy scenariusz):1.Utworzenie połączenia z bazą (SqlConnection)
2.Utworzenie polecenia do wykonania (SqlCommand)
3.Otwarcie połączenia
4.Wykonanie polecenia (ExecuteReader(),
5.ExecuteScalar(), ExecutenonQuery())
6.Przetworzenie wyników (iteracja po SqlDataReader)
7.Zamknięcie połączenie
informatyka +
29
Metoda „na piechotę” – ogólna koncepcja
informatyka +
30
Metoda „na piechotę” – praktyczne rozwiązanie
informatyka +
31
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 +
32
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 +
33
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 +
34
Metoda „na piechotę” – SchoolController
informatyka +
35
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 +
36
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 +
37
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 +
38
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
39informatyka +
40
DAAB – koncepcja
Źródło:Dokumentacja DAAB
informatyka +
41
DAAB – tworzenie kodu dostępu do danych
Typowy scenariusz komunikacji z bazą:
1. Utworzenie instancji klasy Database2. 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 +
42
DAAB – tworzenie kodu dostępu do danych cd.
informatyka +
Przykładowy kod programu:
43
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 +
44
DAAB – konfigurowanie aplikacji cd.
informatyka +
Elementy konfigurowania
45
DAAB – konfigurowanie aplikacji cd.
informatyka +
Wygenerowany dokument XML
46
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 +
47
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
48informatyka +
49
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 +
50
LINQ to SQL – architektura
informatyka +
51
LINQ to SQL – korzystanie
• Podstawą przy pracy z LINQ to SQL jest stworzenie modelu:
informatyka +
52
LINQ to SQL – korzystanie cd
• Tworzenie może odbywać się „ręcznie” lub za pomocą wygodnego narzędzia (designera)• Praca z designerem sprowadza się do przeciągania i upuszczania obiektów z bazy (tabel, widoków, procedur składowanych i funkcji). • Na tej podstawie zostaje wygenerowany kod klas odpowiadających tym obiektom• Łatwo można modyfikować i rozszerzać zachowanie wygenerowanych klas• Nie trzeba w kodzie aplikacji umieszczać żadnego kodu SQL!• Nie trzeba tworzyć samodzielnie encji biznesowych (Student, Note, Subject…)
informatyka +
53
LINQ to SQL – praca z modelem
informatyka +
54
LINQ to SQL – praca z modelem
Model utworzony z trzech tabel i jednej procedury składowanej
informatyka +
55
LINQ to SQL – Model
• Relacje na modelu odpowiadają kluczom obcym i powodują tworzenie dodatkowych właściwości w wygenerowanych klasach.• Np. klasa Student będzie miała właściwość StudentNotes
informatyka +
56
LINQ to SQL – DataContext
•Efekt pracy z modelem – klasa DataContext
•Zawiera właściwości odpowiadające tabelom i widokom oraz metody odpowiadające procedurom i funkcjom
informatyka +
57
LINQ to SQL – Encje (tabele i widoki)
informatyka +
58
LINQ to SQL – klasa (odpowiednik IStudentNotesDB)
informatyka +
59
LINQ to SQL – korzystanie w aplikacji
informatyka +
60
LINQ to SQL – podsumowanie
• Korzystanie z LINQ to SQL pozwala uniknąć pisania sporej ilości kodu ( jest generowany automatycznie)
• Dotyczy to również pisania poleceń SQL
• Poprzez korzystanie z widoków, wyzwalaczy oraz funkcji i procedur składowanych można mieć w szczególnych przypadkach wpływ na postać poleceń wykonywanych przez bazę danych
informatyka +
61
LINQ to SQL – podsumowanie cd.
•Można na tę postać wpływać także przez konfigurowanie właściwości klas modelu
• LINQ to SQL zapewnia wydajność na akceptowalnym poziomie i pozwala uniknąć wielu typowych błędów przy tworzeniu zapytań SQL.
• Zapewnia przyspieszenie procesu tworzenia kodu
• Działa tylko z SQL Server 2005 i 2008 :(
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
62informatyka +
63
Inne rozwiązania
• Subsonic (http://subsonicproject.com )
•nHibernate (https://www.hibernate.org/343.html )
•ADO.NET Entity Framework (http://msdn.microsoft.com/en-us/library/bb399572.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
64informatyka +
65
Podsumowanie
• Dokonaliśmy bardzo krótkiego i pobieżnego przeglądu technik organizowania dostępu do danych.
• Zaznaczyliśmy ich charakterystyczne cechy i różnice w koncepcjach
• Sprawdziliśmy w praktyce ich działanie
• Wymyślanie/korzystanie z rozwiązań dostępu do danych nie jest celem w samym sobie!
informatyka +
66
Podsumowanie cd.
•Warstwa dostępu do danych jest tylko jednym z „klocków” wchodzących w skład aplikacji
• Ważne jest, żeby zdawać sobie sprawę z konsekwencji nieprzyłożenia właściwej wagi do sensownego zaplanowania architektury aplikacji
• Problemy pojawiają się nie przy tworzeniu, ale przy rozwijaniu i modyfikowaniu aplikacji.
• Właściwe podejście pozwala uniknąć tych problemów
•Warto sporo czytać na temat dobrych praktyk dotyczących planowania i tworzenia aplikacji
informatyka +
67
Koniec
Dziękuję za uwagę.
…jakieś pytania?
informatyka +