Architektura a design Klektiv autrů Říjen 2018
Schematický phled (Sftware System) Architecture Struktura Dkumentace tét struktury Základní typy architektury Sftware architecture Business (prcess) architecture bchdní strategie, řízení, rganizace, bchdní prcesy Infrmatin technlgy (system) architecture HW a SW infrastruktura nutná pr chd rganizace Infrmatin architecture rganizace a správa dat (MDM, BI, DWH, ) Enterprise architecture Rle a význam architektury na prjektu? v pdniku?
Architektura vs. Design Architecture? Sftware architecture Realizace nefunkčních pžadavků Strategický design Prgramvací paradigmata, architektnické styly, principy, standardy, Sftware design Realizace funkčních pžadavků Taktický design Design patterns, prgramvací idimy, refaktring, Design Architecture is abut the imprtant stuff. Whatever that is Martin Fwler, Wh needs an Architect?
Sftwarvý prces PROJECT MANAGEMENT / QUALITY ASSURANCE / DOCUMENTATION / CONFIGURATION MANAGEMENT / RELEASE MANAGEMENT / DEVOPS Převzat z http://csse.usc.edu/csse/research/coradmo/
Dkumentace architektury
Sftwarvá architektura dle IEEE 1471 Functinal / lgic view Cde / mdule view Develpment / structural view Cncurrency / prcess/thread view Physical / deplyment view User actin / feedback view Data view
Vliv kntextu na architekturu databázvý systém / subsystém web systém / subsystém (tlustý) klient systém / subsystém OO systém / subsystém data warehuse systém integrační systém / subsystém...
Odbčka - Enterprise architektura Architektura na úrvni celé splečnsti (rganizace). Enterprise architecture zahrnuje ppis cílů rganizace, způsbů jak jsu tyt cíle dsahvány pmcí pdnikvých prcesů a způsbů, jak mhu tyt prcesy být pdpřeny technlgiemi (A Better Path t Enterprise Architectures, Rger Sessins) Prč je ptřeba? Velké splečnsti mají tisíce aplikací => těžké udržet přádek Archimate Business vrstva prdukty a služby zákazníkům Aplikační vrstva aplikace (aplikační kmpnenty) Technlgická vrstva infrastruktura (Nde, Device, System Sftware, ) Příklad: https://www.msk.cz/cz/verejna_sprava/krpratni-architekturamravskslezskeh-kraje-83244/
Příklady
Příklad 1
Příklad 2
Příklad 3
Lgická struktura systému
Fyzická struktura deplyment PaySec architecture PaySec Frntend server Applicatin server Database server Backffice server GUI (WEB) HTTP(S) PaySec frntend PaySec services Scheduler PaySec backffice cnsle Web GUI HTTPS PaySec gateway Transactin cre PaySec database Reprting server Merchant API WCF MQ cnnectr PaySec reprting Web GUI HTTPS PayMuz cnnectr HTTPS MQ FileShare MQ FileShare PayMuz Internet Banking T-Hub CST2 UniCard E-Shp M24x7 CMDB Mbilchange EmailServ er
Fyzická struktura klientské stanice deplyment PaySec architecture PaySec Frntend server Applicatin server Klienti systému HTTP(S) Správci PaySec frntend systémupaysec services GUI (WEB) Database server Scheduler Backffice server PaySec backffice cnsle Web GUI HTTPS PaySec gateway Webvý prhlížeč Transactin cre PaySec database Reprting server Merchant API WCF MQ cnnectr PaySec reprting Web GUI HTTPS PayMuz cnnectr HTTPS MQ FileShare MQ FileShare PayMuz Internet Banking T-Hub CST2 UniCard E-Shp M24x7 CMDB Mbilchange EmailServ er
Fyzická struktura Frntend server deplyment PaySec architecture GUI (WEB) HTTP(S) Frntend server PaySec frntend PaySec gateway PaySec Applicatin Rzhraní server systému Database server pr klienty Backffice server Rzhraní platební brány Scheduler PaySec services Merchant API PaySec backffice cnsle Web GUI HTTPS Kmpnenta PaySec pr database kmunikaci s GPE Transactin cre Reprting server Merchant API WCF PaySec reprting Windws Server 2003, IIS 6 MQ cnnectr Web GUI HTTPS PayMuz cnnectr HTTPS MQ FileShare MQ FileShare PayMuz Internet Banking T-Hub CST2 UniCard E-Shp M24x7 CMDB Mbilchange EmailServ er
Fyzická struktura Aplikační server deplyment PaySec architecture Frntend server HTTP(S) PaySec frntend GUI (WEB) PaySec gateway Merchant API PayMuz cnnectr WCF Applicatin server PaySec services Transactin cre MQ cnnectr PaySec PaySec Services (PayTlServices) Database server Backffice server WCF služby pr PaySec backffice cnsle Scheduler Web GUI HTTPS kmunikaci s business vrstvu PaySec database Transactin cre Reprting server Účtvání transakcí MQ Cnnectr PaySec reprting Web GUI HTTPS Kmunikace s T-Hubem PayMuz HTTPS Internet Banking E-Shp MQ MQ T-Hub FileShare FileShare Windws služba CST2 UniCard M24x7 CMDB Mbilchange EmailServ er Každá kmpnenta = 1 Může bsahvat 0..n agentů, t.j. úlh/prcesů, které vyknává
Fyzická struktura Databázvý server deplyment PaySec architecture PaySec Databáze Frntend server Applicatin server HTTP(S) Scheduler PaySec frntend GUI (WEB) PaySec services 17 různých služeb (agentů), např. ntifikace, PaySec gateway Transactin cre genervání statistik, WCF expirace Merchant API transakcí, zpracvání výpisů, mnitrvání, PayMuz cnnectr atd. MQ cnnectr Database server Scheduler PaySec database Backffice server PaySec backffice cnsle Reprting server PaySec reprting Web GUI HTTPS Web GUI HTTPS HTTPS MQ FileShare MQ FileShare PayMuz Internet Banking T-Hub CST2 UniCard E-Shp M24x7 CMDB Mbilchange EmailServ er
Fyzická struktura BO a reprting server deplyment PaySec architecture PaySec Frntend server Applicatin server Database server Webvá aplikace pr správu PaySec HTTP(S) Přístup k datům přím (bez mezivrstvy PaySec frntend Scheduler PaySec services GUI (WEB) PayTlServices) Backffice server PaySec backffice cnsle Web GUI HTTPS PaySec gateway Transactin cre PaySec database Reprting server WCF Merchant API Vytváření statistik a reprtů MQ cnnectr PaySec reprting Web GUI HTTPS PayMuz cnnectr HTTPS MQ FileShare MQ FileShare PayMuz Internet Banking T-Hub CST2 UniCard E-Shp M24x7 CMDB Mbilchange EmailServ er
Design
Architektura vs. návrh vs. implementace Architecture Návrh v kstce:? Design? Implementatin Dekmpnuj na něklik jedndušších úklů Dá se úkl vyřešit jedním příkazem v kódu? ne an Htv
Kntrakt
Kntrakt public class MyClass extends MyBaseClass implements MyInterface { public static final int THE_ANSWER = 42; prtected MyClass() { } System.ut.printLn( Hell Wrld!"); public final ArrayList<String> handlestuff(arraylist<object> input) thrws IOExceptin { return myhandlestuff(input); } prtected abstract ArrayList<String> handlestuff( ArrayList<Object> input) thrws IOExceptin; }
Návrh v kstce lépe Definuj kntrakt Je jasné, jak kntrakt naplnit? an ne Dekmpnuj na něklik jedndušších úklů Htv
Základy dbréh (OOP) návrhu Decmpsitin Abstractin High chesin Lse cupling Encapsulatin
Chesin (sudržnst) vs.
Cupling (prvázanst)
Lse cupling Cíl: Mdul (třída, ) má c nejméně záviset na svém klí Výhdy: Odlnst prti změnám klí Snazší pchpení Znvupužitelnst Testvatelnst Pzr na skryté vazby Časvé Suslednst událstí /** *... * Pzr! Tat metda musí být vlána až p metdě */
Encapsulatin Cíl: Znemžnit klí záviset na mých implementačních detailech Ochránit vnitřní stav před vnějšími zásahy Výhdy: Omezení dpadu změn na klí ( Encapsulate what changes ) Snazší testvání a verifikace Snazší debugging Interfaces Ultimátní pdba zapuzdření implementační detaily tu vůbec nejsu Jasně definují kntrakt a ddělují h d implementačních detailů Gettery a Settery
C zbyl z OOP? Encapsulatin Rzhdně Plymrphism An, ale mezený čast na interface inheritance Inheritance Prefer cmpsitin ver inheritance Implementatin inheritance pvažvána za nevhdnu Z dkumentace java.sql.timestamp (extends java.util.date): As a result, the Timestamp.equals(Object) methd is nt symmetric with respect t the java.util.date.equals(object) methd Due t the differences between the Timestamp class and the java.util.date class mentined abve, it is recmmended that cde nt view Timestamp values generically as an instance f java.util.date. The inheritance relatinship between Timestamp and java.util.date really dentes implementatin inheritance, and nt type inheritance.
Technical debt Vlba snadnéh řešení namíst kncepčníh řešení Čast pd tlakem na termín. Snaha rychle něc ddat = náklady (pracnst), které bude třeba v buducnu vynalžit (pkud budeme chtít mít systém bez prblémů udržvatelný) Existují nástrje, které změří na úrvni kódu - https://dcs.snarqube.rg/display/sonarqube52/technical+debt Tt samzřejmě nezahrnuje špatná architektnická rzhdnutí. Typické prblémy: Tightly-cupled cmpnents Zanedbaný refactring Nedstatečné pkrytí testy Nedstatečné znalsti (zejména bezpečnst, paralelismus, )
Technical debt Bezhlavý, lehkvážný Rzumný, przíravý Úmyslný, záměrný Nechtěný, neúmyslný Typický prjev zkušenstí získaných realizací prjektu Více infrmací na http://martinfwler.cm/bliki/technicaldebtquadrant.html
Design patterns Katalg základní GOF návrhvé vzry prakticky neknečné kmbinace a variace Význam znvupužitelnst splečný jazyk... Pzr na pčáteční nadšení na nadbytečné užívání patterns indirectin, úrvně abstrakce slžitst
Framewrks Znvupužitelný návrh pr SW systém Pdpra (základna) při vývji jiných SW aplikací Diktuje architekturu systému Určuje jak dekmpnvat systém a jak budu jeh jedntlivé části kmunikvat Základní dekmpzice Frzen spts definice celkvé architektury, neměnné Ht spts zajišťují rzšiřitelnst (abstraktní třídy, antace) C dlišuje framewrk d knihvny - shrnutí Inversin f cntrl Rzšiřitelnst Nemdifikvatelnst Defaultní chvání
Zásady elementárníh návrhu
DRY Dn t Repeat Yurself Cntrller: params.put("axis_length", axislength); Windw: Integer axislength = params.get("axis_length"); Dialg: if (params.get("axis_lenght")!= null) { }
SRP Single Respnsibility Principle Každý lgický celek (mdul, třída, metda, ) má dělat vždy jen jednu věc C když budu ptřebvat přepužít jen jeden z něklika krků? Symptm: inline kmentáře ve stylu: // krk 2: teď uděláme // Spcitej pradi, ve kterem je nutne parsvat DDL skripty // Odstran existujici DDL skripty ve vystupnim adresari // Pr kazdy databazvy bjekt ve spcitanem pradi ziskej jeh // DDL a zparsuj h fr (DdlName ddl : extractinorder) { // Zparsuj DDL // Ulz DDL
Brken Windws
Brken Windws Stejně už je t zprasený
Fail Fast Je-li v prgramu chyba, měl by selhat c nejdříve Aktivně kntrlujte knzistenci a šetřujte mžné chyby Dead prgrams tell n lies Nejhrší je na chybu přijít až p databázvém cmmitu Čím dřív chybu dchytíte, tím víc debugvacích infrmací můžete pskytnut Necháte-li chybu prbublat až d becnéh errr handleru, můžete už říct jen:
YAGNI a KISS YAGNI Yu Ain t Gnna Need It KISS Keep It Simple Stupid POGE - Principle f Gd Enugh https://martinfwler.cm/bliki/yagni.html
Kód Javadc Dkumenty Self-dcumenting cde Kód, který se svu frmu (strukturu, jmennými knvencemi apd.) snaží mezit nutnst číst dkumentaci Neznamená úplnu absenci dkumentace čitelný kód nenahradí kncepční dkumentaci (architektura, design mments, ) Prblémy při chybějící dkumentaci Význam větších funkčních celků Pre/pst cnditins, invariants Inheritance kntrakt vůči ptmkům
Další dbré rady Premature ptimalizatin is rt f all evil Jak implementvat vlastní cache rada první: nedělejte t Jak implementvat vlastní transakce viz předchzí bd Jak implementvat vlastní lazy fetching, zámky, však víte Bezpečnst nelze d kódu přidat ddatečně Thread-safety nelze d kódu přidat ddatečně
Thread-safety Immutable třídy jsu inherentně thread-safe Třídy bez vnitřníh stavu jsu inherentně thread-safe Immutable nce cnfigured Dpručuji všude, kde t jde: Služby beze stavu (bez instančních prměnných krmě dkazů na jiné služby) Stav předávat v parametrech metd a držet v lkálních prměnných Takt napsaný mdul: Nemá režii na synchrnizaci (vhdný i pr aplikace neptřebující thread-safety) Není nezbytně thread-safe, ale půjde t snadn zařídit Je čitelnější je zřejmé, kudy teču data public Graph generatedataflw() generatedataflw(tree { tree) { return handler.prcessnde(tree); } return graph; }
Dtazy? 46
Děkuji za pzrnst Prfinit EU, s.r.. Tychnva 2, 160 00 Praha 6 Telefn + 420 224 316 016 Web LinkedIn Twitter Facebk Yutube www.prfinit.eu linkedin.cm/cmpany/prfinit twitter.cm/prfinit_eu facebk.cm/prfinit.eu Prfinit EU