Tworzenie interfejsów do bazy danych z wykorzystaniem technologii

advertisement
Tworzenie interfejsów do bazy
danych z wykorzystaniem
technologii ADO.Net
informatyka +
2
Obiektowe spojrzenie na bazę danych
Baza
danych
Model
logiczny
bazy
danych
Procedury
składowane
Obiekt
„BazaDanych”
Atrybuty
obiektu
Metody
obiektu
Interfejs „Form”
SQLServer
Środowisko
śieciowe
Wykonane
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
A teraz inne podejście
????????????
Metoda
„WykonajPrzelew”
Iterfejs „Form”
Wykonane
Wykonaj przelew z konta A na konto B
SQL Server
Środowisko
śieciowe
1.Wykonaj metodę „…Przelew”
2.Odpowiedź z metody
Dostęp do baz danych
(.NET Framework 3.5)
Aplikacja
Dostęp do danych
Baza danych
informatyka +
7
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 +
8
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 +
9
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 +
10
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 +
11
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 +
12
Architektura aplikacji c.d.
• Skupmy się na typowej, prostej architekturze warstwowej
Interfejs użytkownika
• Zwany warstwą prezentacji
• Zadanie: prezentować i pobierać dane
Logika biznesowa
• Definiuje obowiązujące w systemie reguły
• Umożliwia realizację poleceń użytkownika
Dostęp do danych
• „Odcięcie” wyższych warstw od szczegółów
mechanizmu dostępu do danych
Baza danych
• Składowanie danych
informatyka +
13
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 +
14
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 +
15
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 +
16
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 +
17
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 +
18
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 +
19
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 +
20
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 +
21
Warstwa prezentacji
informatyka +
22
Warstwa biznesowa
informatyka +
23
Klasy warstwy biznesowej
informatyka +
24
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 +
25
Diagram bazy danych
• skrajnie proste
rozwiązanie
• zawiera przykładowe
procedury składowane
informatyka +
26
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 +
27
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 +
28
Metoda „na piechotę” – ogólna koncepcja
informatyka +
29
Metoda „na piechotę” – praktyczne rozwiązanie
informatyka +
30
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 +
31
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 +
32
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 +
33
Metoda „na piechotę” – SchoolController
informatyka +
34
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 +
35
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 +
36
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.
nformatyka +
i
37
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 +
38
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 +
39
DAAB – koncepcja
Źródło:Dokumentacja DAAB
informatyka +
40
DAAB – tworzenie kodu dostępu do danych
Typowy scenariusz komunikacji z bazą:
1. Utworzenie instancji klasy Database
2. 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 +
41
DAAB – tworzenie kodu dostępu do danych cd.
Przykładowy kod programu:
informatyka +
42
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 +
43
DAAB – konfigurowanie aplikacji cd.
Elementy konfigurowania
informatyka +
44
DAAB – konfigurowanie aplikacji cd.
Wygenerowany dokument XML
informatyka +
45
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 +
46
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 +
47
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 +
48
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 +
49
LINQ to SQL – architektura
informatyka +
50
LINQ to SQL – korzystanie
• Podstawą przy pracy z LINQ to SQL jest stworzenie
modelu:
informatyka +
51
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 +
52
LINQ to SQL – praca z modelem
informatyka +
53
LINQ to SQL – praca z modelem
Model utworzony z trzech tabel i jednej procedury
składowanej
informatyka +
54
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 +
55
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 +
56
LINQ to SQL – Encje (tabele i widoki)
informatyka +
57
LINQ to SQL – klasa (odpowiednik IStudentNotesDB)
informatyka +
58
LINQ to SQL – korzystanie w aplikacji
informatyka +
59
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 +
60
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 +
61
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 +
62
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 +
63
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 +
64
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 +
65
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 +
66
Koniec
Dziękuję za
uwagę.
…jakieś pytania?
informatyka +
67
Download