Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013

Podobne dokumenty
Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2014

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2015

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017

Programowanie obiektowe

Java Persistence API - zagadnienia zaawansowane

Projektowanie aplikacji z bazami danych

Paweł Rajba

LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy.

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

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Kurs programowania aplikacji bazodanowych

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Kurs programowania aplikacji bazodanowych

Programowanie wielowarstwowe i komponentowe

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2017

Paweł Kurzawa, Delfina Kongo

Post-relacyjne bazy danych

Baza danych sql. 1. Wprowadzenie

Programowanie obiektowe

Podejście obiektowe do relacyjnych baz danych Hibernate.

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

1. Mapowanie diagramu klas na model relacyjny.

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

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

Technologie obiektowe

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

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

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Podstawy frameworka Spring

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Projektowanie systemów informatycznych. Roman Simiński siminskionline.pl. Modelowanie danych Diagramy ERD

Studia podyplomowe. Programowanie na platformie Microsoft Visual Studio.NET

Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016

Projektowanie logiki aplikacji

Technologia informacyjna

Program szkolenia: Symfony, nowoczesny framework PHP

Oracle PL/SQL. Paweł Rajba.

Szablony funkcji i klas (templates)

WPROWADZENIE DO BAZ DANYCH

22. Podstawowe pojęcia baz danych. Baza Danych. Funkcje bazy danych. Właściwości bazy danych. Modele baz danych.

Rysunek 1: Przykłady graficznej prezentacji klas.

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Wybrane problemy z dziedziny modelowania i wdrażania baz danych przestrzennych w aspekcie dydaktyki. Artur Krawczyk AGH Akademia Górniczo Hutnicza

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

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control Wiktor Zychla 2013

Hibernate. Adrian Gawor, Adam Klekotka, Piotr Kubisz. Technologie Biznesu Elektronicznego. 12 maja 2009

UML w Visual Studio. Michał Ciećwierz

Zaawansowane programowanie w C++ (PCP)

Jarosław Kuchta Projektowanie Aplikacji Internetowych. Projektowanie warstwy danych

Spis treúci. 1. Wprowadzenie... 13

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

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

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

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów niestacjonarnych studiów II stopnia)

Podrozdziały te powinny zawierać informacje istotne z punktu widzenia przyjętego celu pracy

PODSTAWY BAZ DANYCH. 5. Modelowanie danych. 2009/ Notatki do wykładu "Podstawy baz danych"

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Metody dostępu do danych

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Scala - programowanie obiektowo-funkcyjne

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

Programowanie obiektowe. Wprowadzenie

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Paweł Rajba

Wzorce projektowe i refaktoryzacja

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

dlibra 3.0 Marcin Heliński

Programowanie obiektowe

Dobry start do profesjonalnego programowania w C++ dla. początkujących programistów

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

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

1 Wprowadzenie do J2EE

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

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

Technologie odwzorowania. owania obiektowo-relacyjnego. relacyjnego: Oracle TopLink

INFORMATYKA Pytania ogólne na egzamin dyplomowy

Jarosław Żeliński analityk biznesowy, projektant systemów

Wzorce projektowe. dr inż. Marcin Pietroo

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Instrukcja laboratoryjna

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów dziennych studiów II stopnia)

Języki i paradygmaty programowania - 1

Program szkolenia: Zaawansowane programowanie w C++

Bazy Danych i Systemy informacyjne Wykład 7. Piotr Syga

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

Zaawansowane programowanie w C++ (PCP)

METODY PROGRAMOWANIA

Transkrypt:

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013 1 Automated code generation To bardziej technika wspomagająca niż wzorzec, ale wykorzystywana w praktyce bardzo często. Chodzi o generowanie kodu przez automat, ale w taki sposób, żeby kod który generuje kod nie był tylko i wyłącznie kodem imperatywnym, ale możliwie jak najbardziej deklaratywnym. Realizowane przez wiele narzędzi, np. Text Template Transformation Toolkit (T4). Przykład: szablon generowania kodu klasy. Imperatywnie zadany model klasy: public partial class PreTextTemplate1 public string ClassName get; set; public List<string> FieldNames get; set; Deklaratywnie napisany generator: <#@ template language="c#" #> public class <#= this.classname #> <# foreach ( var field in this.fieldnames ) #> public string <#= field #>; <# #> To co należy zapamiętać to to, że generatory kodu powinny udostępniać strategię generowania jedno i dwustopniowego. W generowaniu jednostopniowym (bezpośrednim) efektem ewaluacji szablonu jest dokument wynikowy. W powyższym przypadku dla przykładowego modelu wynikiem ewaluacji szablonu byłby tekst: public class Foo public string Bar;

W generowaniu dwustopniowym efektem ewaluacji szablonu jest kod imperatywny, który trzeba skompilować i wykonać i dopiero wynikiem wykonania tego kodu jest docelowy dokument. Zaletą podejścia dwustopniowego jest możliwość automatyzacji scenariuszy automatycznego generowania (łączenia wielu szablonów, generowania tego samego szablonu wielokrotnie z różnymi parametrami, itd.). W powyższym przypadku wynikiem pierwszego etapu dwustopniowej ewaluacji byłby (raczej nieczytelny, bo wygenerowany przez automat) kod: #line 1 "ConsoleApplication83\PreTextTemplate1.tt" [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTe mplating", "10.0.0.0")] public partial class PreTextTemplate1 : PreTextTemplate1Base public virtual string TransformText() this.write("\r\npublic class "); #line 3 "ConsoleApplication83\PreTextTemplate1.tt" this.write(this.tostringhelper.tostringwithculture(this.classname)); this.write("\r\n\r\n "); #line 5 "ConsoleApplication83\PreTextTemplate1.tt" foreach ( var field in this.fieldnames ) this.write("\r\n public string "); #line 7 "ConsoleApplication83\PreTextTemplate1.tt" this.write(this.tostringhelper.tostringwithculture(field)); this.write("\r\n\r\n "); #line 9 "ConsoleApplication83\PreTextTemplate1.tt" this.write("\r\n"); return this.generationenvironment.tostring(); 2 Object-relational mapping Uwaga! Ilustracje pochodzą z podręcznika Patterns of Enterprise Application Architecture. Wzorzec mapowania obiektowo-relacyjnego jest jednym z możliwych podejśd do problemu niezgodności świata obiektowego i świata relacyjnego (relacyjnych baz danych). Wzorzec ORM jest interesujący w kontekście podwzorców.

2.1 Lazy loading Obiekt nie zawiera danych relacyjnych, ale wie jak je pozyskad. W praktyce Lazy loading realizowany jest na jeden z trzech sposobów: 1. Lazy initialization leniwe właściwości (propercje) zawierają normalny, imperatywny kod dostępu do danych i flagę boole owską, która działa jak strażnik, dzięki któremu kod dostępu do danych wykonuje się tylko za pierwszym razem 2. Virtual proxy silnik mapowania obiektowo relacyjnego automatycznie tworzy wirtualne proxy do zwracanych obiektów, które to proxy mają automatycznie dołączony kod implementujący Lazy initialization (różnica jest taka, że nie trzeba tego kodu implementowad bezpośrednio w klasie dziedzinowej) 3. Value holder implementacja leniwych składowych deleguje pozyskiwanie wartości do zewnętrznych obiektów, które zarządzają dostępem do danych W praktyce wszystkie trzy metody są wykorzystywane często, z przewagą 2. i 3. 2.2 Navigation properties (aka Foreign key mapping) Mapowanie kluczy obcych na relacje między klasami. To bardzo naturalne oczekiwanie. W modelu z diagramu powyżej oczekiwalibyśmy właściwości nawigacyjnych (navigation properties) w obie strony klasa Album powinna mied właściwośd typu Artist, a klasa Artist właściwośd typu IEnumerable<Album>. 2.3 Many-to-many (aka Association table mapping) Automatycznie modeluj asocjację relację wiele-do-wiele między obiektami jako pomocniczą tabelę

W prawidłowej implementacji tego podwzorca ważne jest to, żeby silnik mógł samodzielnie zarządzad tabelą odwzorowującą relację. W praktyce spotyka się często implementacje niepełne za pomocą podwzorca Navigation modelowane są jawnie relacje między obiema klasami a istniejącą jawnie klasą-modelem dla tabeli odwzorowującej relację. 2.4 Concrete table/single table/class table Inheritance Trzy możliwe strategie odwzorowania w strukturze relacyjnej relacji dziedziczenia. 1. Concrete table W tym podejściu hierarchia mapuje się na osobne tabele dla każdej z klas. 2. Single table

W tym podejściu hierarchia mapuje się na jedną tabelę zawierającą sumę kolumn z całej hierarchii oraz dodatkową kolumnę type, dzięki której silnik może zorientowad się jakiego typu jest konkretny wiersz tabeli. 3. Class table W tym podejściu hierarchia mapuje się na tabele, ale każda z tabel odwzorowuje tylko te kolumny, które są właściwe dla klasy, którą modeluje. 2.5 1st level cache (aka Identity map) 1st level cache - zapytania o obiekty o konkretnych identyfikatorach powinny byd cache owane. Identity map to jedna z technik implementacji, w której wewnętrznie wykorzystuje się kolekcję asocjacyjną, mapującą wartośd identyfikatora na obiekt. 2.6 2nd level cache 2nd level cache wybrane zapytania powinny byd możliwe do cache owania. Powinien istnied jawny mechanizm do zarządzania cache. Implementacja podsystemu cache owania powinna byd wymienna. 2.7 Query language Silnik powinien udostępniad obiektowy język zadawania zapytao, inny niż SQL. Dobrym przykładem języka zapytao jest Linq, inne przykłady to HQL, Criteria API, JPQL.

2.8 Global filter Query language powinien dawad możliwośd określenia globalnego filtra w taki sposób żeby był konsekwentnie automatycznie aplikowany do wszystkich poziomów zagnieżdżonych zapytao. 2.9 Metadata mapping Silnik mapowania obiektowo-relacyjnego powinien udostępniad różne strategie definiowania metadanych: 1. Metadane są częścią definicji klas (atrybuty, określona hierarcha dziedziczenia) 2. Metadane są zewnętrzne w stosunku do definicji klas (definiowane deklaratywnie w XML lub imperatywnie za pomocą API) 2.10 Model first vs Code first Różne strategie definiowania metadanych mogą przełożyd się na różną filozofię logistyki orm: 1. Model first najpierw modelowana jest struktura relacyjna, a model obiektowy ją odwzorowuje (często jest generowany przez automat; patrz Automated code generation) 2. Code first najpierw modelowana jest struktura obiektowa, a struktura relacyjna tylko ją odwzorowuje (często jest generowana i zarządzana przez automat; przykład z wykładu Entity Framework Code First + Migrations)