Dnešní program. Architektura, Design. Když zbude čas. Architektura webové aplikace Design patterns IoC, AOP. Kuchařky, dočasná řešení



Podobné dokumenty
Architektura, design, konstrukce

Jak správně na Hibernate. Martin Hlavatý

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Principy OOP při tvorbě aplikací v JEE. Michal Čejchan

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

SOAP & REST služby. Rozdíly, architektury, použití

(Enterprise) JavaBeans. Lekce 7

Správa a sledování SOA systémů v Oracle SOA Suite

Spring framework 2.0. Roman Pichlík CZJUG

PA165: Úvod do Java EE. Petr Adámek

UJO Framework. revoluční architektura beans. verze

Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Návrhové vzory Tvorba objektů

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Softwarové komponenty a Internet

Projekty pro výuku programování v jazyce Java

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Testovací metoda. Testovací metoda. public class SimpleTest {

Web Services na SOAP

KIV/PIA 2013 Jan Tichava

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Základy analýzy. autor. Jan Novotný února 2007

Návrhové vzory OMO, LS 2014/2015

Architektury Informačních systémů. Jaroslav Žáček

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.


Architektury Informačních systémů. Jaroslav Žáček

Architektura softwarových systémů

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Využití identity managementu v prostředí veřejné správy

Distribuované systémy a výpočty

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

CONNECTING GOVERNMENT AND CITIZENS Creating a Single Citizen View Konference ISSS, Jaroslav Novotný Sun Microsystems Czech

Čipové karty Lekařská informatika

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Dědičnost (inheritance)

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Datová vrstva informačního systému. Miroslav Beneš

Analýza a modelování dat. Přednáška 5

RMI - Distribuované objekty v Javě

Architektura orientovaná na služby Návrh orientovaný na služby. Ing. Petr Weiss. VUT v Brně,, FIT, UIFS

Integrací aplikací proti blackoutům

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

CZ.1.07/1.5.00/

Základy objektové orientace I. Únor 2010

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Systémová administrace portálu Liferay

IBA CZ průmyslový partner FI MU

RMI Remote Method Invocation

Tvorba informačních systémů

Úvod do Entity Frameworku

Řízení reálných projektů, agilní metodiky

SOA a Cloud Computing

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Návrhové vzory Design Patterns

PLM VDM. Lístek k úspěšné implementaci

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

Enterprise Java Beans 3.0

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Servisně orientovaná architektura a její aplikace v systémech sledování a řízení výroby

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Tvorba informačních systémů

Technologie JavaBeans

Úvod do Web Services

10 Balíčky, grafické znázornění tříd, základy zapozdření

Tvorba informačních systémů

Vytvoření procesně integrační nástavby KUBIKI pro ERP systém MAX+

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

programátor vs. vývojář

Budování architektury pomocí IAA

SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým

Datová vrstva informačního systému. Java Database Connectivity JDBC. Obsah přednášky JDBC. Datová vrstva informačního systému

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

IOPC2. Petr Čermák Vedoucí RNDr. Michal Kopecky, Ph.D.

Tonda Beneš Ochrana informace podzim 2011

KTE / ZPE Informační technologie

Penetrační test & bezpečnostní audit: Co mají společného? V čem se liší?

Statická analýza kódu - za kód bez chyb

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

Úvod do CORBY. Svetlozara Arabadzhieva

Webové programování je CHALENGE! Milan Čapoun, Samuel Šramko

Návrhové vzory pro J2EE. Miroslav Beneš

X33EJA Enterprise Java. Petr Šlechta Sun Microsystems

Od klasického reportingu k SAP BO Design studio na BW power by HANA Pavel Strnad

Komponentový návrh SW

Iterator & for cyklus

4. lekce Přístup k databázi z vyššího programovacího jazyka

Mobilní malware na platformě Android Přednáška 2. Ing. Milan Oulehla

Transkript:

Architektura, design, konstrukce

Dnešní program Architektura, Design Architektura webové aplikace Design patterns IoC, AOP Konstrukce Kuchařky, dočasná řešení Když zbude čas Integrace a integrační ní styly

Jak se pozná dobrá architektura

Dobrá architektura Dokáže pojmout nové požadavky Systém je udržovatelný i pro letech v provozu Není zbytečně komplexní Je pochopitelná Je implementovatelná Je zdokumentovaná :-)

Realita organizace mají typicky stovky aplikací na každou věc je jedna nejlepší aplikace různé technologie a dodavatelé aplikací Conway s law: Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.

Architektura vs. design Zjednodušeně: Architektura high-level Design detailní Fowler: Architecture is about the important stuff. Whatever that is

Architektura, Design Úroveň: vývoj jednotlivé aplikace objektově orientované programování design patterns (architektonické) a jejich reálné použití na projektu integrace aplikací

Dobrá rada Neobjevujte kolo

Klasická architektura webové aplikace Jednoduchá Flexibilní Rozšířitelná Nevýhody: Občas jen Občas jen převolávání vrstev

Není Je vůbec taková složitost potřeba? Ale rozhodnutí musí být činěno při znalosti důsledků Např. obtížnější rozvoj. V naprosté většině případů se vyplatí udělat to pořádně Člověk k nikdy neví, co život přinese. U větších aplikací bývá architektura složitější.

Složitější architektura Terénní pracovníci Dispečeři Administrátor Autentizační systém Autentizační systém Externí systém DB cluster Data Interface Externí systém Externí systém

SOA Access Manager (Liberty) Auto Loans Bill Pay Composite Applications Stocks Mutual Funds Services Registry (Regrep UDDI) Credit Card Mortgage Payment Management Service Credit Check Fraud Detection Reusable Services Access Service Interest Calc Balance Check Customer Data Service Trade Execution Service Internet Increased Agility Partner Credit Data Back-End System Back-End System Customer Data

Service Oriented Architecture Všichni o ni mluví, ale málokdo ví, co to je Základní myšlenka spousta aplikací potřebuje podobné funkce => naprogramovat jednou, používat opakovaně Služby (zpravidla webové) cílem SOA je dosáhnout menší závislost/svázanost na systémech navzájem umožňuje uje znuvupoužitelnost a sdílení IT infrastruktury včetně starých aplikací a dat ESB, BPEL, BPMN, Business rules, Human Workflows, BAM, B2B, IDM, BI, ECM,

Architektura a design

Architektura a design návrhové vzory od GoF* ve dvou větách Program to an interface, not an implementation. Favor object composition over class inheritance. *) GoF = Gang of Four viz http://en.wikipedia.org/wiki/design_patterns_(book)

Návrhové vzory vztah lidí k DP lidé, kteří znají základy OO a intuitivně od přírody navrhují elegantně, mají dar pro design; DP padnou na úrodnou půdu, ale řeknou "no jasně" lidé, kteří po delší či kratší cestě na 1 až n pokusů tomu přijdou na chuť lidé, kteří přečtou všechny knihy, moc se jim to líbí, nikdy ale elegantně sami nenavrhnou nic co má víc než 5 programůů

Příklad Design Patternu Návrhový vzor GenericDAO Oddělení kódu pracujícího s databází (ideálně prostřednictvím ORM) do samostatné vrstvy Pro každý doménový objekt jeden interface a jeho implementace

GenericDAO GenericDAO Implementace základních metod IGenericDAO Metody společné pro všechny DAO Typicky obsahuje CRUD operace Ideální pokud máme k dispozici generické typy (Java 1.5, C#)

AOP Jen další TLA? Buzzword? Nikoliv. AOP je překvapivě užitečný koncept AOP = Aspect Oriented Programming Využití Logování Transakce A mnoho dalšího Loose code coupling

Příklad (Spring) <bean class="org.springframework.aop.framework.autoproxy.beannameautoproxycreator"> <property name="proxytargetclass" value="false"/> <property name="beannames" value="*service,*dao"/> <property name="interceptornames" value="loggingadvice"/> </bean> <bean id="loggingadvice" class="org.springframework.aop.interceptor.customizabletraceinterceptor"> <property name="usedynamiclogger" value="true"/> <property name="hideproxyclassnames" value="true"/> <property name="entermessage" value="vstupuji do metody '$[methodname]' tridy [$[targetclassshortname]]. Parametry: $[arguments]"/> <property name="exitmessage" value="navrat z metody '$[methodname]' tridy [$[targetclassshortname]]. Navratova hodnota: $[returnvalue]. Volani trvalo: $[invocationtime] ms"/> <property name="exceptionmessage" value="v metode '$[methodname]' tridy [$[targetclassshortname]] doslo k vyjimce $[exception]."/> </bean>

IoC aka DI Další TLA IoC = Inversion of Control DI = Dependency Injection Závislosti definujeme deklarativně Výhody Flexibilita Snadnost změn Spring, Google Juice, EJB 3,

Nic se nemá přehánět @FilterDefs({ @FilterDef(name="CPojisteni_policka", parameters = @ParamDef(name = "platnost", type = "date")), @FilterDef(name="CPojisteni_souhrnneLimity", parameters = @ParamDef(name = "platnost", type = "date")), @FilterDef(name="CPojisteni_okamzikyAAkce", parameters = @ParamDef(name = "platnost", type = "date")), @FilterDef(name="CPojisteni_algoritmy", parameters = @ParamDef(name = "platnost", type = "date")) }) @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) @Entity @Table(name = "c_pojisteni") public class CPojisteni extends Konfigurace { } @OneToMany(fetch = FetchType.LAZY, mappedby = "pojisteni") @Fetch(value = FetchMode.SELECT) @Sort(type = SortType.NATURAL) @Filter(name = "CPojisteni_policka", condition = TemporalniVztah.FILTER_PLATNOSTI) @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) private SortedSet<CPojisteniPolicko> policka;

Konstrukce

Konstrukce - dnešní obsah Úvod statická analýza kódu konvence pro psaní kódu kuchařky dočasná řešení

Příklad najdi chybu Connection con; try { con = getconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmd.executequery("select jmeno, prijmeni " + "FROM osoby"); while (rs.next()) { Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni(rs.getstring(" prijmeni ") ); osoby.add(osoba); } } catch (Exception e) { } finally { con.close(); }

Překvapivá pointa :-) Connection con; try { con = getconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmd.executequery("select jmeno, prijmeni " + "FROM osoby"); while (rs.next()) { Osoba osoba = new Osoba(); osoba.setjmeno( rs.getstring("jmeno") ); osoba.setprijmeni(rs.getstring(" prijmeni ") ); osoby.add(osoba); } } catch (Exception e) { Chybou je boilerplate kód } finally { con.close(); }

Programovat přece všichni umíme Ale důležitá je kvalita Modularizace Dodržování konvencí Komentování Jak se zlepšovat Čtení cizího kódu Code revisions Čtení chytrých knížek Open source contribution

Konstrukce Konvence pro psaní kódu Pro Java Sun Code Convention CodeConventions.pdf Pro C# C# Coding standards Naše sepsané po X revizích kódu Java Profinit_JavaPrgTechniques.doc DBS Profinit_DbsPrgTechniques.doc

Konstrukce kuchařky v designu jsme vymysleli, že to budeme dělat takhle víme, proč to tak děláme víme, že to má nevýhody ale budeme to dělat takhle a ne jinak udržovatelnost tedy na to napíšeme kuchařku, podle které to udělá kde kdo příklad kuchařky ky pro VC Balíčků IPBPBAL_KucharkaProV&C.doc nedělat dočasná řešení pak při dodávce koukáte, kam je co nastavené a nechápete

Dočasná řešení (z praxe ;-) ) private String encpass = 12345678 //TODO pouzit silnejsi heslo!!! Nebo: try { } catch (Exception e) { } e.printstacktrace() // TODO osetrit lepe!

Statická analýza kódu statická analýza kódu najde vám hodně chyb zcela zadarmo puštěno po létech vývoje na aplikaci Balíčky našlo 955 chyb příklad Comparison of String parameter using == or!= Class defines equals() and uses Object.hashCode() Invocation of tostring on an array Method may fail to close database resource Method ignores return value String datestring = getheaderfield(name); datestring.trim(); Nástroje PMD, FindBugs, StyleCop,

Cvičení Navrhněte objektový model této učebny.

Diskuse Komentáře Otázky Připomínky Upřesnění Poznámky