1 / 34

Architektura , design, konstrukce 4 . cvi čení , A4M33SEP

Architektura , design, konstrukce 4 . cvi čení , A4M33SEP. Martin Hasaj martin.hasaj@profinit.eu http://www.profinit.eu/pro-univerzity/univerzitni-vyuka.html. P rogram. Úvod Připomenutí – poslat téma zápočtové práce. Architektura, Design Architektura webové aplikace Design patterns

osmond
Download Presentation

Architektura , design, konstrukce 4 . cvi čení , A4M33SEP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architektura, design, konstrukce4. cvičení, A4M33SEP Martin Hasaj martin.hasaj@profinit.eu http://www.profinit.eu/pro-univerzity/univerzitni-vyuka.html

  2. Program • Úvod • Připomenutí – poslat téma zápočtové práce. • Architektura, Design • Architektura webové aplikace • Design patterns • IoC, AOP … • Konstrukce • Kuchařky, dočasná řešení … • Když zbude čas • Integrace a integrační styly

  3. Jak se pozná dobrá architektura

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

  5. 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.”

  6. Architektura vs. Design • Zjednodušeně: • Architektura – high-level • Design – detailní Fowler: „Architecture is about the important stuff. Whatever that is …“

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

  8. Dobrá rada • Neobjevujte kolo !!!

  9. Architektura WEB aplikace • Jednoduchá • Flexibilní • Rozšířitelná • Nevýhody: • Převolávánívrstev

  10. Architektura WEB - složitost • Je vůbec taková složitost potřeba? • Není • 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 nikdy neví, co život přinese. • U větších aplikací bývá architektura složitější.

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

  12. OOP a Design Patterns • objektově orientované programování a design patterns • pokud chci rozumět DP, musím chápat OOP • polymorfismus • concrete inheritance • abstractinheritance • interface • abstract class • overriding • delegation • composition

  13. Design Patterns • 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 ofFour – viz http://en.wikipedia.org/wiki/Design_Patterns_(book)

  14. Design Patterns • kdy má smysl zabývat se návrhovými vzory • člověkzná, rozumí a aktivněpoužívázáklady OOP • člověkzná, rozumí a aktivněpoužívázákladnítrikylowlewel OO Designu (nabázipolymorfismus, interface,overriding) • člověkchápejaképroblémymusívěcněpřidesignuřešit(dekomponovatsystém, poskládatsystém, ...) • člověkunejsoucizíúvahy o předmětudekompozice • člověkužněconavrh, naprogramoval, opravoval,modifikovalrozvíjel • a HLAVNĚ zpětněprostudoval, pochopil,diskutoval, redesignoval • člověkzjistí, žechápejaképroblémy, proča jakGoFřeší; • člověkzjistí, žespoustuvěcíudělalnějakpodobně

  15. Vztah lidí k Design Patterns • 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ů

  16. Příklad DesginPatternu • 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

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

  18. AOP • Jen další TLA? Buzzword? • Nikoliv. AOP je překvapivě užitečný koncept • AOP = AspectOrientedProgramming • Využití • Logování • Transakce • A mnoho dalšího • Loosecodecoupling

  19. Příklad SPRING <beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <propertyname="proxyTargetClass" value="false"/> <propertyname="beanNames" value="*Service,*Dao"/> <propertyname="interceptorNames" value="loggingAdvice"/> </bean> <bean id="loggingAdvice" class="org.springframework.aop.interceptor.CustomizableTraceInterceptor"> <propertyname="useDynamicLogger" value="true"/> <propertyname="hideProxyClassNames" value="true"/> <propertyname="enterMessage" value="Vstupuji do metody '$[methodName]' tridy [$[targetClassShortName]]. Parametry: $[arguments]"/> <propertyname="exitMessage" value="Navrat z metody '$[methodName]' tridy [$[targetClassShortName]]. Navratova hodnota: $[returnValue]. Volani trvalo: $[invocationTime] ms"/> <propertyname="exceptionMessage" value="V metode '$[methodName]' tridy [$[targetClassShortName]] doslo k vyjimce $[exception]."/> </bean>

  20. IOC akaDI • Další TLA • IoC = InversionofControl • DI = DependencyInjection • Závislosti definujeme deklarativně • Výhody • Flexibilita • Snadnost změn • Spring, GoogleJuice, EJB 3, …

  21. Čistota, půl života … @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") publicclassCPojisteniextends 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) privateSortedSet<CPojisteniPolicko> policka; … }

  22. Konstrukce

  23. Obsah • Úvod • statická analýza kódu • konvence pro psaní kódu • kuchařky • dočasná řešení

  24. Příklad, najdi chybu … Connectioncon; try { con = getConnection(); Statementstmt = con.createStatement(); ResultSetrs = 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(); }

  25. Překvapivá pointa  Connectioncon; try { con = getConnection(); Statementstmt = con.createStatement(); ResultSetrs = 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(); } • Chybou je boilerplate kód

  26. Programovat umíme • Ale důležitá je kvalita • Modularizace • Dodržování konvencí • Komentování … • Jak se zlepšovat • Čtení cizího kódu • Coderevisions • Čtení chytrých knížek • Open sourcecontribution

  27. Konstrukce • konvence pro psaní kódu • pro Java • Sun CodeConventionCodeConventions.pdf • Naše sepsané po X revizích kódu • Java Profinit_JavaPrgTechniques.doc • DBS Profinit_DbsPrgTechniques.doc

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

  29. Dočasné řešení z praxe  privateStringencPass = „12345678“ //TODO pouzitsilnejsi heslo!!! • Nebo: try { … } catch (Exception e) { e.printStackTrace() // TODO osetrit lepe! }

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

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

  32. SCA • 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

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

  34. Otázky ???

More Related