METODY PROGRAMOWANIA

Podobne dokumenty
Wzorce logiki dziedziny

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie w języku Java. Bazy danych SQLite w Javie

Projektowanie Aplikacji Rozproszonych Jarosław Kuchta. Wzorce projektowe warstwy danych

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

akademia androida Składowanie danych część VI

Programowanie obiektowe

Wzorce dystrybucji i wspólbieżności autonomicznej

JAVA I BAZY DANYCH. MATERIAŁY:

J2EE wzorce projektowe. Alicja Truszkowska

Programowanie w języku Java WYKŁAD

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Programowanie obiektowe

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej

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

Wzorce prezentacji internetowych

Metody dostępu do danych

MVC w praktyce tworzymy system artykułów. cz. 1

Metody dostępu do danych

Bartosz Jachnik - Kino

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Bazy danych SQLite w Javie

Programowanie obiektowe

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Połączenia między bazami danych i programem w języku Java część 2

Wzorce projektowe i refaktoryzacja

Programowanie wielowarstwowe i komponentowe

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Zrąb webowy dla perfekcjonistów z terminami. autor: Kamil Adamczyk

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

JAX-RS czyli REST w Javie. Adam Kędziora

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

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

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Programowanie obiektowe

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

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

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

JDBC. Plan ćwiczenia. Wywoływanie poleceń SQL z języków programowania. Plan ćwiczenia cd. Wprowadzenie do laboratorium

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Bazy Danych i Usługi Sieciowe

Podejście obiektowe do relacyjnych baz danych Hibernate.

Oracle PL/SQL. Paweł Rajba.

Programowanie obiektowe

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

JAVA bazy danych. na bazie: Język Java - Podstawy Programowania - Jacek Rumiński

Programowanie i projektowanie obiektowe

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Programowanie obiektowe

PROJEKTOWANIE SYSTEMU INFORMATYCNEGO

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Wykład 05 Bazy danych

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Bazy danych i usługi sieciowe

Programowanie komputerów. Wykład 10: Dostęp do baz danych z poziomu aplikacji Java. (JDBC Database Access)

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie współbieżne Laboratorium nr 11

Programowanie poprzez testy z wykorzystaniem JUnit

Rozdział 48 Transpers generyczna mikroarchitektura warstwy dostępu do danych 1 Wstęp

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Laboratorium 8 Diagramy aktywności

Java: interfejsy i klasy wewnętrzne

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Wprowadzenie do framework a Symfony


Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Projektowanie algorytmów rekurencyjnych

Programowanie obiektowe

Java. Programowanie Obiektowe Mateusz Cicheński

Ćwiczenia 2 IBM DB2 Data Studio

Paweł Cieśla. Dokumentacja projektu

Typy sterowników. Rozdział 21 JDBC. Podstawowe kroki aplikacji. Historia. Program napisany w języku Java JDBC API. Menadżer sterowników JDBC

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

Aplikacje RMI

Programowanie Obiektowe Ćwiczenie 4

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Java Database Connectivity

Programowanie obiektowe

Programowanie obiektowe

Nowe technologie baz danych

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Polimorfizm. dr Jarosław Skaruz

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Transkrypt:

METODY PROGRAMOWANIA Wzorzec Repository 21 października 2017 Krzysztof Pawłowski kpawlowski@pjwstk.edu.pl

Każdy wzorzec opisuje problem, który ciągle pojawia się w naszej dziedzinie, a następnie określa zasadniczą część jego rozwiązania w taki sposób, by można było zastosować je nawet milion razy, za każdym razem w nieco inny sposób. A Patterns Language (1977) Alexander Christopher

CZYM JEST WZORZEC PROJEKTOWY? sprawdzone w praktyce rozwiązanie powtarzalnych problemów projektowych powiązania i zależności pomiędzy klasami i obiektami jest opisem rozwiązania a nie jego implementacją

POCZĄTKI WZORCÓW PROJEKTOWYCH Design Patterns: Elements of Reusable Object- Oriented Software, 1995 autorzy: Gamma, Help, Johnson, Vlissides Katalog 23 wzorców projektowych Pokazanie zastosowania wzorców projektowych w dziedzinie projektowania oprogramowania

GDZIE SZUKAĆ OPISÓW WZORCÓW ARCHITEKTONICZNYCH?

WZORZEC REPOSITORY - MOTYWACJA zasada DRY (Don t Repeat Yourself) zasada KISS (Keep It Simple, Stupid) łatwość zmiany bazy danych łatwość testowania

ARCHITEKTURA 3- WARSTWOWA

WZORZEC REPOSITORY

WZORZEC REPOSITORY - PRZYKŁAD

WZORZEC REPOSITORY - PRZYKŁAD https://github.com/krzysztof-pawlowski/mprrepository-pattern (branch to_refactor)

WZORZEC DATA MAPPER tłumaczy tabele bazodanowe na klasy modelu pozwala na niezależne rozwijanie modelu i schematu bazy danych

WZORZEC DATA MAPPER - PRZYKŁAD klasa: class Person { private String lastname; private String firstname; private int numberofdependents; } tabela: create table people (ID int primary key, lastname varchar, firstname varchar, number_of_dependents int)

WZORZEC DATA MAPPER - PRZYKŁAD class PersonMapper... protected String findstatement() { return "SELECT " + COLUMNS + " FROM people" + " WHEREid=?"; } public static final String COLUMNS = "id, lastname, firstname, number_of_dependents"; public Person find(long id) { return (Person) abstractfind(id); }

WZORZEC DATA MAPPER - PRZYKŁAD class AbstractMapper<T>... protected Map<Long, T> loadedmap = new HashMap(); abstract protected String findstatement(); protected T abstractfind(long id) { T result = loadedmap.get(id); if (result!= null) return result; PreparedStatement findstatement = null; try { findstatement = DB.prepare(findStatement()); findstatement.setlong(1, id.longvalue()); ResultSet rs = findstatement.executequery(); rs.next(); result = load(rs); return result; } catch (SQLException e) { throw new ApplicationException(e); } finally { DB.cleanUp(findStatement); } }

WZORZEC DATA MAPPER - PRZYKŁAD class AbstractMapper<T>... protected T load(resultset rs) throws SQLException { Long id = new Long(rs.getLong(1)); if (loadedmap.containskey(id)) return (DomainObject) loadedmap.get(id); T result = doload(id, rs); loadedmap.put(id, result); return result; } abstract protected T doload(long id, ResultSet rs) throws SQLException;

WZORZEC DATA MAPPER - PRZYKŁAD class PersonMapper extends AbstractMapper<Person>... protected Person doload(long id, ResultSet rs) throws SQLException { String lastnamearg = rs.getstring(2); String firstnamearg = rs.getstring(3); int numdependentsarg = rs.getint(4); return new Person(id, lastnamearg, firstnamearg, numdependentsarg); }

WZORZEC QUERY OBJECT obiekt reprezentujący zapytanie bazodanowe

WZORZEC QUERY OBJECT - class QueryObject... PRZYKŁAD private Class klass; private List criteria = new ArrayList<Criteria>(); class Criteria... private String sqloperator; protected String field; protected Object value;

WZORZEC QUERY OBJECT - PRZYKŁAD class Criteria... public static Criteria greaterthan(string fieldname, int value) { return Criteria.greaterThan(fieldName, new Integer(value)); } public static Criteria greaterthan(string fieldname, Object value){ return new Criteria(" > ", fieldname, value); } private Criteria(String sql, String field, Object value) { this.sqloperator = sql; this.field = field; this.value = value; }

WZORZEC QUERY OBJECT - PRZYKŁAD class Person... private String lastname; private String firstname; private int numberofdependents; QueryObject query = new QueryObject(Person.class); Criteria c = Criteria.greaterThan("numberOfDependents", 0); query.addcriteria(c); query.generatesql();