KONFERENCIJA 2017. SPAJAMO TEHNOLOGIJU I ZNANJE
SPONZORI I POKROVITELJI Sponzori Pokrovitelji
Software arhitektura za developere Bernardin Katić
Tko sam ja? Programer od vremena Spectruma Voditelj razvojnog tima za bankarske appse Ms MVP za Visual Studio i razvojne tehnnologije Ljubitelj kulena i organizator KulenDayza Po vjeroispovjesti Jedi
Agenda: Što je arhitektura softwarea? Što je dizajn softwarea? Treba li nam to stvarno? SOLID principi software dizajna Arhitekturni patterni, prednosti i mane Polemična rasprava
Software arhitektura je proces definiranja strukture rješenja koja zadovoljava sve tehničke i operativne zahtjeve, a optimizira atribute kvalitete kao što su brzina, sigurnost i lakoća održavanja i daljnjeg razvoja.
Software design je proces definiranja klasa, metoda, funkcija, interfacea te njihove strukture i njihovih interakcija koji zadovoljavaju funkcionalne zahtjeve korisnika
Software design rješava problem procesiranja kada korisnik pritisne button na formi Software arhitektura rješava problem procesiranja kada 10000 korisnika pritisne button na formi
Arhitektura kuće za vjernog najboljeg prijatelja Može napraviti jedna osoba Zahtjevi: Minimalno planiranje Jednostavne procese Jednostavne alate
Arhitektura stambene kuće Da bi bila napravljena kvalitetno i brzo zahjeva stručni tim Zahtjevi: Planiranje Jasno definirani procesi Profesionalni alati
Pfff! Šta će nam arhitekta, vidi stoji! Zadovoljava formu! Rezultat: Kratkotrajna Teško i često održavanje Nesigurna Nikakve ekonomske vrijednosti Najmanja promjena može dovesti do kolapsa
Until shit hits the fan...
Razlike Procesi Cijena Rokovi Profesionalnost tima Materijali i tehnologije Sudionici projekta Rizici Životni vijek projekta
Atributi kvaliteta Brzina Raspoloživost Korisnost Sigurnost Lakoća održavanja Portabilnost Reusability Lakoća testiranja Time to Market Cijena i korisnost Planirani životni ciklus Ciljano tržište Integracija sa legacy sustavima Krajnji korisnik Developer Business
Dizajn Softwarea
Često je software design kao JENGA
Trust me, I m an engineer!
Trust me, I m an engineer!
Trust me, I m an engineer!
SOLID Principles S O L I D SRP OCP LSP ISP DIP Single Responsibility Principle Open/Closed Principle Liskovs Substitution Principle Interface Segregation Principle Dependency Inversion Principle
Da li su vaše klase bar približno ovako korisne?
A onda uz mali change request mogu i ovo...
Idealno rješenje za ovog customera
A gdje će špangicu zatakuti ovaj customer???
Klasa treba imati jedan i samo jedan razlog za promjenu!
Jedino promjena osnovnih zahtjeva je razlog za promjenu!
Ali onda će nam kod biti u milijun klasica u gomili file-ova!?! BAŠ TAKO! I ŠTA ONDA!
Klase trebaju biti zatvorene za promjene i otvorene za proširenja.
Kada je klasa gotova, onda je gotova!
Open Close Principle
Base klasu u pozivima uvijek treba biti moguće bez problema zamijeniti sa podklasom
Ulazni argumenti ne smiju biti stroži u podklasi Izlazni argumenti ne smiju biti šiti u podklasi Podklasa ne smije implementirati nove vrste exceptiona
Klase ne smiju ovisiti o interfaceima koji im nisu nužni.
Kada razbijemo kompleksne interface nna manje dijelove jednostavnije ih je implmentirati i imamo veću kontrolu
High level moduli ne smiju ovisiti o low level modulima. Svi trebaju ovisiti o apstrakcijama
Kada klase ne ovise o specifičnoj implementaiji lagano je bezbolno je napraviti promjene
SOLID u praksi Prije Poslje
Arhitekture Softwarea
Layered Arhitektura
Layered Arhitektura
Layered Arhitektura
Reports of the MVC death have been greatly exaggerated
Layered Arhitektura Agilnost Niska Monolitna, Čvrsto povezani Lakoća Deploymenta Lakoća testiranja Niska Visoka Često promjena zahtjeva cijelokupni deployment Lagano zamijeniti sloj za potrebe testiranja Brzina sustava Niska Pozivi kroz više slojeva Skalabilnost Niska Monolitna, Čvrsto povezani Lakoća razvoja Visoka Jednostavna, dobro poznata, jasne uloge slojeva
Event-Driven Arhitektura
Event-Driven Arhitektura Agilnost Visoka Odvojene komponente Lakoća Deploymenta Visoka Odvojene komponente Lakoća testiranja Niska Paralelni asnikroni sustav Brzina sustava Visoka Paralelni asnikroni sustav Skalabilnost Visoka Svaki event procesor moguće skalirati odvojeno Lakoća razvoja Niska Paralelni asnikroni sustav
Microkernel Arhitektura
Microkernel Arhitektura Agilnost Visoka Odvojene plug-in komponente Lakoća Deploymenta Visoka Odvojene plug-in komponente Lakoća testiranja Visoka Odvojene plug-in komponente Brzina sustava Skalabilnost Lakoća razvoja Visoka Niska Niska Kernel bez suvišnih funkcionalnosti Najčešće implementiran kao jedinstven sustav Contracts, granularnost, plug-in registry
Microservices Arhitektura
Microkernel Arhitektura Agilnost Lakoća Deploymenta Lakoća testiranja Visoka Visoka Visoka Odvojene male servis komponente Odvojene male servis komponente Odvojene male servis komponente Brzina sustava Niska Distribuirano procesiranje Skalabilnost Lakoća razvoja Visoka Visoka Odvojene male servis komponente Odvojene male servis komponente
Koju arhitekturu vi koristite?
Izvori i reference Software Architecture Patterns, Mark Richards Agile Software Development: Principles, Patterns, and Practices, Robert C. Martin The S.O.L.I.D Principles, Chris Klug Refactoring Code to a SOLID Foundation, Adnan Masood StackOverflow Discussions
ZA ONE KOJI ŽELE ZNATI VIŠE criscon.krizevci.hr