• Nie Znaleziono Wyników

Tworzenie interfejsow do baz danych z wykorzystaniem technologii ADONET

N/A
N/A
Protected

Academic year: 2021

Share "Tworzenie interfejsow do baz danych z wykorzystaniem technologii ADONET"

Copied!
68
0
0

Pełen tekst

(1)
(2)

Tworzenie interfejsów do bazy

Tworzenie interfejsów do bazy

danych z wykorzystaniem

danych z wykorzystaniem

technologii ADO.Net

technologii ADO.Net

2

informatyka +

(3)

Obiektowe spojrzenie na bazę danych

Baza danych Model logiczny bazy danych Procedury składowane Obiekt „BazaDanych” Atrybuty obiektu Metody obiektu

(4)

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

(5)

A teraz inne podejście

A teraz inne podejście

(6)

SQL Server

Iterfejs „Form”

Środowisko śieciowe

Wykonaj przelew z konta A na konto B Metoda

„WykonajPrzelew”

1.Wykonaj metodę „…Przelew” 2.Odpowiedź z metody

(7)

Dostęp do baz danych

Dostęp do baz danych

(.NET Framework 3.5) (.NET Framework 3.5)

7

informatyka +

(8)

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 ;-)

8

informatyka +

(9)

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

9

informatyka +

(10)

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

10

informatyka

+

“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ą ?"

(11)

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

11

informatyka

+

(12)

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ć

???

(13)

Architektura aplikacji c.d.

Skupmy się na typowej, prostej architekturze warstwowej

13

informatyka

+

(14)

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

14

informatyka +

(15)

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ę

15

informatyka

+

(16)

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

16

informatyka +

(17)

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

17

informatyka +

(18)

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

18

informatyka +

(19)

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:

(20)

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

(21)

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)

22

Warstwa prezentacji

(23)

23

Warstwa biznesowa

(24)

24

Klasy warstwy biznesowej

(25)

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

(26)

26

Diagram bazy danych

• skrajnie proste rozwiązanie

• zawiera przykładowe procedury składowane

(27)

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

27

informatyka +

(28)

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

(29)

29

Metoda „na piechotę” – ogólna koncepcja

(30)

30

Metoda „na piechotę” – praktyczne rozwiązanie

(31)

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().

(32)

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ń

(33)

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)

(34)

34

Metoda „na piechotę” – SchoolController

(35)

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.

(36)

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)

(37)

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.

(38)

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ć.

(39)

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

39

informatyka +

(40)

40

DAAB – koncepcja

Źródło:Dokumentacja DAAB

(41)

41

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

(42)

42

DAAB – tworzenie kodu dostępu do danych cd.

informatyka +

(43)

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ą

(44)

44

DAAB – konfigurowanie aplikacji cd.

informatyka +

(45)

45

DAAB – konfigurowanie aplikacji cd.

informatyka +

(46)

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

(47)

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

(48)

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

48

informatyka +

(49)

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

(50)

50

LINQ to SQL – architektura

(51)

51

LINQ to SQL – korzystanie

• Podstawą przy pracy z LINQ to SQL jest stworzenie modelu:

(52)

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…)

(53)

53

LINQ to SQL – praca z modelem

(54)

54

LINQ to SQL – praca z modelem

Model utworzony z trzech tabel i jednej procedury składowanej

(55)

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

(56)

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

(57)

57

LINQ to SQL – Encje (tabele i widoki)

(58)

58

LINQ to SQL – klasa (odpowiednik IStudentNotesDB)

(59)

59

LINQ to SQL – korzystanie w aplikacji

(60)

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

(61)

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 :(

(62)

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

62

informatyka +

(63)

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 )

(64)

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

64

informatyka +

(65)

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!

(66)

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

(67)

67

Koniec

Dziękuję za

uwagę.

…jakieś pytania?

informatyka +

(68)

Cytaty

Powiązane dokumenty

Niezależność aplikacji i danych - dane mogą być wprowadzane do bazy bez konieczności modyfikacji korzystających z nich programów czy systemów użytkowych, a z drugiej

Dodaj reguły poprawności wprowadzania danych do poszczególnych pól celem uniemożliwienia wprowadzenia niepoprawnego adresu e- mail, pesela, kodu pocztowego, adresu…..

o Krajowym Rejestrze Sądowym (Dz. zmieniające rozporządzenie w sprawie szczegółowego sposobu prowadzenia rejestrów wchodzących w skład Krajowego Rejestru Sądowego

• Wprowadzony jest serwer aplikacji, który udostępnia dane klientom pełniąc rolę interfejsu między klientami a serwerami bazy danych. •

Jeśli na serwerze MS SQL znajduje się zainstalowana baza danych i dysponujemy MS SQL Server Managemant Studio, to istnieje możliwość skierowania do wybranej bazy danych poleceń

Według tych analiz oraz struktury ofert pracy kształcenie w zawodach branży IT jest nie tyle celowe, ale wręcz konieczne, ze względu nie tylko na zapotrzebowanie rynku

Projekt mechanizmów bezpieczeństwa na poziomie bazy danych .... Projekt aplikacji

bibliograficznych artykułów gromadzonych w wersji papierowej, które są dostępne online oraz do artykułów z czasopism, które nie są. prenumerowane a dostępne