ASP.NET Wprowadzenie. provided by Przemysław Bykowski



Podobne dokumenty
Wzorce projektowe. dr inż. Marcin Pietroo

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Programowanie obiektowe

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Wprowadzenie do programowania aplikacji mobilnych

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Wzorce projektowe i refaktoryzacja

Wzorce projektowe. Wstęp

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Zaawansowane programowanie w C++ (PCP)

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Programowanie Zespołowe

problem w określonym kontekście siły istotę jego rozwiązania


Technologia Programowania 2016/2017 Wykład 4

PHP 5 język obiektowy

Wykład 8: klasy cz. 4

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie obiektowe

Tworzenie i wykorzystanie usług sieciowych

REFERAT PRACY DYPLOMOWEJ

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wzorce logiki dziedziny

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Builder (budowniczy) Cel: Przykład:

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Programowanie obiektowe

Facelets ViewHandler

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Modelowanie i Programowanie Obiektowe

Wprowadzenie do Doctrine ORM

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wywoływanie metod zdalnych

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Dokumentacja do API Javy.

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Kurs WWW. Paweł Rajba.

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Zaawansowane programowanie w języku C++ Klasy w C++

Podstawy Programowania Obiektowego

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Podstawy JavaScript ćwiczenia

MasterPage w ASP.NET

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Diagram wdrożenia. Rys. 5.1 Diagram wdrożenia.

TEMAT : KLASY DZIEDZICZENIE

Podstawy Programowania 2

PRZEWODNIK PO PRZEDMIOCIE

Wywoływanie metod zdalnych

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Web frameworks do budowy aplikacji zgodnych z J2EE

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wzorce projektowe Michał Węgorek

Programowanie MorphX Ax

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Aplikacje RMI Lab4

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

Programowanie obiektowe - 1.

Podstawy programowania III

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Zaawansowane aplikacje internetowe laboratorium REST

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie obiektowe

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Interfejsy i klasy wewnętrzne

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Rozdział 4 KLASY, OBIEKTY, METODY

Materiały do laboratorium MS ACCESS BASIC

Programowanie komponentowe 5

Abstract Factory (fabryka abstrakcyjna)

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Programowanie obiektowe

Java Język programowania

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Transkrypt:

ASP.NET Wprowadzenie provided by Przemysław Bykowski

Strona internetowa vs aplikacja internetowa

Aplikacja internetowa Nie ustępuje możliwościami od standardowej aplikacji desktopowej Przeglądarka pośredniczy miedzy aplikacją a użytkownikiem Pierwszymi aplikacje internetowe dotyczyły obsługi poczty elektronicznej Bardzo wygodna. Użytkownik nie musi instalować oprogramowania, by uzyskać taką sama funkcjonalność, jak standardowy program Oceń, przykładową aplikacje - tu

Dodawanie formatki do projektu

Budowa formularza Pojedynczy (prosty) formularz składa się z trzech części: Nazwa_Formatki.aspx wygląd aplikacji. Posiada dwa tryby widoku: kod źródłowy (X)HTML tryb graficzny Nazwa_Formatki.aspx.cs cześć logiczna aplikacji Nazwa_Formatki.aspx.designer.cs logiczna reprezentacja elementów GUI

Kompilacja aplikacji Nazwa_Formatki.aspx nie ulega kompilacji. W takiej samej postaci musi zostać umieszczony na serverze Nazwa_Formatki.aspx.cs Nazwa_Formatki.aspx.designer.cs - oba pliki muszą zostać skompilowane przed umieszczeniem na serwerze. Pliki te kompilują się do bibliotek *.dll i w takiej postaci muszą zostać umieszczone na serverze

Kompilacja aplikacji <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="cos_popsulem._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html>

Podstawowe własności strony <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Nazwa_Formatki.aspx.cs" Inherits="Nazwa_Projektu.Nazwa_Formatki" %> Language określa język programowania jaki będziemy wykorzystywać do pisania warstwy logicznej aplikacji. Inne możliwości to VS i JS. AutoEventWireup określenie, czy wywołane zdarzenia będą automatycznie powiązane z funkcja ich obsługi. CodeBehind powiązanie bieżącego pliku z plikiem przechowującym logikę. Inherits dziedziczenie. Przeważnie jest to nazwa klasy zaimplementowanej w pliku kodu określonego parametrem CodeBehind.

Inne przydatne właściwości Trace szczegółowe informacje na temat żądań Więcej na http://msdn.microsoft.com/enus/library/ydy4x04a(v=vs.85).aspx

ASP.NET Praca z danymi provided by Przemysław Bykowski

Praca z bazą danych Możliwość podawania ręcznych zapytań do bazy danych. Wykorzystywanie procedur zdefiniowanych w bazie danych do wykonywania operacji na niej. Entity Framework genialne narzędzie ORM. Bardzo wygodne wygoda. Prawdopodobnie wydajność naszej aplikacji spada o około 20% niż w przypadku wykosztowania ręcznych zapytań. Istnieje kilka podobnych narzędzi ORM. Przykładowo bardzo popularny oparty o licencje GNU NHibernate.

Lokalizacja bazy danych Baza danych może istnieć lokalnie (*.sdf). Taką bazę danych należy umieścić w specjalnie przeznaczonym do tego katalogu App_Data. Możemy nawiązać zdalne połączenie z bazą danych. Nie jest wymagane, aby baza danych znajdowała się lokalnie na serwerze. W obu przypadkach zostanie utworzony tzw. ConnectionString

ConnectionString Przechowuje dane do połączenia z bazą danych. Domyślnym miejscem przechowywania connectionstringa jest plik Web.config Przykładowy CS: <connectionstrings> <add name= ObiektReprezentujacy" connectionstring="metadata=res://*/model1.csdl res://*/model1.ssdl res://*/model1.msl;pr ovider=system.data.sqlclient;provider connection string="data source=nazwa_hosta;initial catalog=nazwa_bazy_danych;integrated security=true;multipleactiveresultsets=true;app=typ_polaczenia"" providername="system.data.entityclient" /> </connectionstrings>

Tworzenie ConnectionString Nie musimy ręcznie tworzyć połączeń Wszystko za programistę załatwiają kreatory

GridView Niektóre kontrolki są w stanie automatycznie pobrać zawartość dla siebie z bazy danych. Same wykonują odpowiednie zapytania do bazy danych GridView pozwala wyświetlić użytkownikowi zawartość wybranej tabeli, a następnie pozwolić na ich modyfikacje.

LINQ Umożliwia pobieranie danych na poziomie kodu Składnia podobna do SQL Służy do zadawania pytań na obiektach a nie elementach bazy danych Przykład zapytania LINQ var wynik = from x in mojakolekcja where x.id > 10 select x SELECT * To samo w SQL INTO #wynik FROM mojatabela WHERE id > 10 W przeciwieństwie do składni C# - zapytania w LINQ nie są key sensitive

ASP.NET Testy jednostkowe provided by Przemysław Bykowski

Test jednostkowe co to? Metoda, która sprawdza inną metodę, czy owa metoda, działa poprawie Stosuje się go tylko (to nie jest sztywna zasada) w projektach regularne rozwijanych. Wzięła swój początek w programowaniu ekstremalnym

Test jednostkowe jakie one powinny być Możliwie najprostszą logikę Często pisane są one przez testerów, a nie samych programistów (w zależności od wielkości korporacji) Jeden test wykonuje (powinien) jedno działanie/sprawdza jedna metodę Jeżeli istnieje taka potrzeba, można sprawdzać wiele klas oraz ich metod w jednym teście

Test jednostkowe po co to komu? Wspomagają pracę programisty i testera Przyspiesza proces wytwarzania oprogramowania (o dziwo?) Stosuje się go tylko (to nie jest sztywna zasada) w projektach regularne rozwijanych. Bo wymaga tego Agile - wprowadzona w metodykach programowania Agile (zwinne) czy wszyscy wiedzą czym jest Agile?

Refaktoryzacja Refaktoryzacja (czasem też refaktoring, ang. refactoring) to pojęcie związane z wytwarzaniem systemów informatycznych, w szczególności z programowaniem. Jest to proces wprowadzania zmian w projekcie/programie, w wyniku których zasadniczo nie zmienia się funkcjonalność. Celem refaktoryzacji jest więc nie wytwarzanie nowej funkcjonalności, ale utrzymywanie odpowiedniej, wysokiej jakości organizacji systemu. W ramach refaktoryzacji podejmowane są następujące działania: modyfikowanie elementów systemu w celu wpasowania ich w przyjęte standardy i wzorce poszukiwanie nowych standardów i wzorców, które pojawiły się w systemie w trakcie jego rozwoju i ich precyzyjne definiowanie (łącznie z wpasowywaniem istniejących elementów w te definicje). Źródło Wikipedia : http://pl.wikipedia.org/wiki/refaktoryzacja

Test driven development (TTD) Etap 1 piszemy test jednostkowy Etap 2 upewniamy się, że dany test zwraca negatywny wynik Etap 3 implementujemy daną metodę/funkcjonalność w naszym projekcie zalecane nawet, aby była ona napisana w sposób łopatologiczny Etap 4 wykonujemy test jednostkowy. Jeśli nie otrzymamy poprawności wykonania testu patrz etap 3 Etap 5 refaktoryzacja metody/funkcjonalności Etap 6 ponowne wykonanie testu jednostkowego. W przypadku nie powtórzenia patrz etap 3

Przykład wykonywania testu Zakładam nowy projekt Zastanawiam się co ma realizować mój projekt np. dodawanie zaimplementowanie w klase liczenie.cs Tworze projekt testu jednostkowego Implementuj test jednostkowy określając parametry wejściowe i oczekiwany wynik Implementuje metodę dodawania w klasie liczenie.cs Sprawdzam poprawność działania mojej metody if (poprawnoscmetody == Test.passed) else { } Optymalizuj.Metode(dodawanie) Popraw.Metode(dodawanie) SprawdzPoprawnosc.Metody(dodawanie) Koniec.Pracy(DataTime.Now()) Anegdota - przeciętny programista pisze 10-15 linijek kodu dziennie

Wniosek TEST JEDNOSTOWY ZAWSZE I TO ZAWSZE WYKONUJE PRZED ZAIMPLEMENTOWANIEM LOGIKI MOJEJ APLIKACJI INACZEJ NIE MA ON SENSU! Dlatego często test jednostkowy wykonuje inna osoba niż ta implementująca funkcjonalność. Testy jednostkowe warto jest wykonywać tylko wtedy, gdy: - projekt jest dalej rozwijany - będzie w przyszłości wykorzystywany

Jak tworzyć test w VS? Tworze dowolny projekt bardzo często.asp dlaczego?

Co chce osiągnąć realizując swoją aplikacje? Kalkulator! Dodaje moja klasę LiczMnie ale tylko po to, aby uzyskać podpowiadanie składni w moim projekcie testowym

Tworze test jednostkowy Pamiętaj, że test jednostkowy dodaje się do solucji a nie projektu!

Dodaje projekt testu

Mam już dwa projekty Otrzymuje dwa projekty Jeden projekt aplikacji Drugi projekt testu Pamiętamy o podpięciu referencji, aby oba projekty widziały się nawzajem

Mam już dwa projekty Otrzymuje dwa projekty Jeden projekt aplikacji Drugi projekt testu Pamiętamy o podpięciu referencji, aby oba projekty widziały się nawzajem

Mam już dwa projekty Otrzymuje dwa projekty Jeden projekt aplikacji Drugi projekt testu Pamiętamy o podpięciu referencji, aby oba projekty widziały się nawzajem

Implementuje swoje testy Otrzymuje dwa projekty Jeden projekt aplikacji Drugi projekt testu Pamiętamy o podpięciu referencji, aby oba projekty widziały się nawzajem

Mam już dwa projekty Otrzymuje dwa projekty Jeden projekt aplikacji Drugi projekt testu Pamiętamy o podpięciu referencji, aby oba projekty widziały się nawzajem

Pisze test jednostkowy w klasie projektu MojTest

Wykonuje test w nadziei, że się nie wykona poprawnie

Implementuje logikę programu

Sprawdzam testy

Poprawiam testy i refaktoryzuje klasę logiki

Sukces!

Pytania?

Dziękuje za uwagę provided by Przemysław Bykowski przemyslaw@bykowski.pl

Wzorce projektowe provided by Przemysław Bykowski

Wzorzec projektowy Rozwiązuje problemy projektowe Ułatwia powtórne wykorzystywanie poprawnie zaprojektowanych architektur Nie zmienia logiki programu Dotyczą projektów środowiska obiektowego zorientowanego Ułatwia utrzymanie, oraz rozbudowywanie oprogramowania Jest opisem rozwiązania, a nie jego konkretną implementacją

Budowa wzorca Każdy wzorzec projektowy składa się z 4 kluczowych elementów: Nazwa wzorca uniwersalna indykacja wzorca Opis problemu, który dany wzorzec rozwiązuje Rozwiązanie Konsekwencje (jeśli istnieją)

Rodzaje wzorców projektowych Konstrukcyjne (Creational) związane z procesem tworzenia obiektów. Strukturalne (Structural) dotyczą struktury klas lub/i obiektów Operacyjne (Behavioral) sposób współdziałania, zachowania klas lub/i obiektów

Przykłady najpopularniejszych wzorców

Singleton wzorzec konstrukcyjny Gwarantuje tylko jedna instancje obiektu Pozwala na globalny dostęp do utworzonej instancji Wykorzystywany do przechowywania zmiennych publicznych Połączeń z bazą danych, połączeń z portami szeregowymi

Singleton rozwiązanie Singleton implementuje się przez stworzenie klasy, która posiada statyczną metodę, która najpierw sprawdza, czy istnieje już instancja tej klasy, w razie potrzeby tworząc ją. Następnie instancja zwracana jest przez referencję. Instancję przechowuje się w prywatnym lub chronionym, statycznym polu, do którego dostęp ma tylko opisana wyżej metoda, która jest jedyną drogą pozyskania instancji obiektu singletonu aby uniemożliwić tworzenie dodatkowych instancji, konstruktor klasy deklaruje się jako prywatny lub chroniony. Źródło Wikipedia : http://pl.wikipedia.org/wiki/singleton_(wzorzec_projektowy)

Singleton przykład Java } } public class ClassicSingleton { private static ClassicSingleton instance = null; protected ClassicSingleton() { public static ClassicSingleton getinstance() { if(instance == null) { instance = new ClassicSingleton(); } return instance; }

Metoda wytwórcza (Factory method) wzorzec konstrukcyjny Tworzenie obiektów w sposób dynamiczny Kod otwarty na rozbudowę Przykład: W zależności od akcji użytkownika zostanie zwrócony mu odpowiedni obiekt

Metoda wytwórcza rozwiązanie We wzorcu występują dwie ogólne klasy bądź interfejsy definiujące pewien typ zasobów (Product) oraz sposób ich tworzenia (Creator, metoda factorymethod()). Od nich wyprowadza się konkretne klasy zasobów (ConcreteProduct) wraz z tworzącymi je klasami wytwórczymi (ConcreteCreator), które dostarczają odpowiednią implementację metody factorymethod(). Komponent pragnący tworzyć zasoby i operować na nich, korzysta z ogólnych interfejsów Product oraz Creator, umożliwiając wybór konkretnej implementacji w sposób dynamiczny. Źródło : Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: Wydawnictwo Naukowo-Techniczne, 2008

Metoda wytwórcza przykład Java class Wynagrodzenie { private const UInt16 STAWKA_GODZINOWA_PIEKARZA = 10; private const UInt16 STAWKA_GODZINOWA_NAUCZYCIELA = 21; private const UInt16 STAWKA_GODZINOWA_KIEROWNIKA = 50; public static float ObliczWynagrodzenia(TypZawodu zawod, UInt16 iloscprzepracowanychgodzin) { switch (zawod) { case TypZawodu.PIEKARZ: return STAWKA_GODZINOWA_PIEKARZA * iloscprzepracowanychgodzin; case TypZawodu.NAUCZYCIEL: return STAWKA_GODZINOWA_NAUCZYCIELA * iloscprzepracowanychgodzin; case TypZawodu.KIEROWNIK: return STAWKA_GODZINOWA_KIEROWNIKA * iloscprzepracowanychgodzin; default: return 0; } }}

interface IPracownik { float ObliczWynagrodzenie(UInt16 iloscprzepracowanychgodzin); } // każdy pracownik musi implementować metodę ObliczWynagrodzenie class Piekarz : IPracownik { private const UInt16 STAWKA_GODZINOWA = 10; public float ObliczWynagrodzenie(UInt16 iloscprzepracowanychgodzin) { return STAWKA_GODZINOWA * iloscprzepracowanychgodzin; } } class Nauczyciel : IPracownik { private const UInt16 STAWKA_GODZINOWA = 21; public float ObliczWynagrodzenie(UInt16 iloscprzepracowanychgodzin) { return STAWKA_GODZINOWA * iloscprzepracowanychgodzin; } }

class Kierownik : IPracownik { private const UInt16 STAWKA_GODZINOWA = 50; public float ObliczWynagrodzenie(UInt16 iloscprzepracowanychgodzin) { return STAWKA_GODZINOWA * iloscprzepracowanychgodzin; } } //użycie: IPracownik pracownik = WynagrodzenieFactoryMethod.MakePracownik(TypZawodu.NAUCZYCIEL); pracownik.obliczwynagrodzenie(120); //jeśli będziemy chcieli dodać kolejny zawód, to musimy tylko utworzyć nowa klasę, która implementuje interface IPracownik oraz dodać do metody MakePracownik kolejnego case'a Źródło Wikipedia : Przykład http://wyprogramowanie.blogspot.com/2008/04/wzorce-projektowefactory-method-metoda.html

Pula obiektów (Object pool) wzorzec strukturalny Zarządzanie pulą obiektów reprezentujących zasoby wielokrotnego użycia Ograniczenie kosztów (głównie czasowych) tworzenia i usuwania obiektów Zwiększenie wydajności systemu

Pula obiektów - rozwiązanie Zdefiniowanie punktu dostępu do obiektów (zarówno do ich tworzenia, jak i zwrotu) oraz zarządzanie cyklem ich życia: tworzeniem, inicjalizacją i usuwaniem. Klient może otrzymać instancję klasy Obiekt wyłącznie za pomocą Puli obiektów i w ten sam sposób zwalnia przydzielony obiekt. Źródło Wikipedia : http://pl.wikipedia.org/wiki/singleton_(wzorzec_projektowy)

Pula obiektów przykładowy algorytm 1. Pula obiektów tworzy określoną ilość obiektów zadanych klas/klasy. 2. Obiekty te przechowywane są w puli. 3. W momencie kiedy klient zgłasza zapotrzebowanie na dany obiekt - nie trzeba będzie go inicjalizować, wystarczy pobrać istniejący z puli. PrzykładowaKlasa PrzykladowePole : String PrzykladowaMetoda() Klient PulaObiektow UtworzObiekt() PobierzObiekt() Wzorzec często wykorzystywany przy aplikacjach współpracujących z bazami danych. Nawiązanie nowego połączenia trwa długo pobranie już istniejącego skraca ten czas.

Dziękuje za uwagę provided by Przemysław Bykowski przemyslaw@bykowski.pl