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/
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? 34
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