TDP024 Enterprise Systems

Relevanta dokument
TDP024 Enterprise Systems

TDP024. Enterprise Systems. Introduktion, ES, SOA, Multi-Tier. Anders Fröberg Institutionen för Datavetenskap (IDA)

TDP024 Enterprise Systems

DB, DATA, LOGIC, EXPOSURE (WEB)

TDP024. Informationssökning Datalayer JPA - Facade, Logging, Testing. Enterprise Systems. Anders Fröberg Institutionen för Datavetenskap (IDA)

TDP025. Entreprenöriell programmering. Marcus Bendtsen Institutionen för Datavetenskap (IDA)

Webbtjänster med API er

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Agenda TDP024 IN A NUTSHELL TDP024. Muddy Card Skrivuppgiften JPA

TDDD80 Mobila och sociala applikationer. Kursintroduktion

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

TDP024. Datalayer JPA - Facade, Logging, Testing. Enterprise Systems. Anders Fröberg Institutionen för Datavetenskap (IDA)

Systemutvecklare SU14, Malmö

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Grundkurs i programmering - intro

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Labb 1: Vad, hur, och varför?

Android översikt. TDDD80 Mobila och sociala applikationer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

Distribuerade System, HT03

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Distribuerade affärssystem

Inledande programmering med C# (1DV402) Introduktion till C#

TDP003. Föreläsning 2. Filip Strömbäck

TDP001: Handhavande av datormiljö, 4 hp. Ola Leifler, Institutionen för datavetenskap

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Arkitektur. Den Röda Tråden

Objektorienterad Programkonstruktion. Föreläsning jan 2016

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Programvaruteknik, hp

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

TDDD80 Mobila och sociala applika1oner. Kursintroduk1on

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

TDDC77 Objektorienterad Programmering

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

TDDD80. Mobila och sociala applikationer Introduktion HTTP,SaaS. Anders Fröberg Institutionen för Datavetenskap (IDA)

SAS USER FORUM SWEDEN 2017 USER FORUM. SAS Viya och öppenhet en gemomgång av LUA-, Java-, Python- och REST-gränssnitten mot SAS Viya

Kopiering av objekt i Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

TDP013. Webbprogrammering och interaktivitet. AJAX, CORS & jquery. Marcus Bendtsen Institutionen för Datavetenskap (IDA)

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Classes och Interfaces, Objects och References, Initialization

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Webbprogrammering. Sahand Sadjadee

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

TDDD80 Mobila och sociala applikationer. Kursintroduktion

Webbtjänster med API er

TDIU01 (725G67) - Programmering i C++, grundkurs

OOP Objekt-orienterad programmering

Alternativet är iwindows registret som ni hittar under regedit och Windows XP 32 bit.

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Webbteknik II. Föreläsning 5. Restless farewell. John Häggerud, 2011

Föreläsning 1 & 2 INTRODUKTION

Laboration 3, uppgift En klass för en räknare

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Samsung NVR SRN-473S/873S/1673S Quick guide till web/app anslutning

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Trådar. Aktiva objekt

Objektorienterad programmering

Design och konstruktion av grafiska gränssnitt

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Software Technology. Josef Svenningsson

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Services + REST och OAuth

Objektsamlingar i Java

Objektorienterad programmering D2

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

TUTORIAL: KLASSER & OBJEKT

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDP013. Node.js, Mocha, Istanbul. Anders Fröberg Institutionen för Datavetenskap

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

1 Klasser och objektorientering Vad är objektorientering?

Transkript:

TDP024 Enterprise Systems Introduktion, ES, SOA, Multi-Tier Anders Fröberg Institutionen för Datavetenskap (IDA)

2 TDP024 Kursinformation Kurshemsidan innehåller information om laborationerna, seminariet och examinationen. Föreläsningskoden finns på hemsidan, detta är kurslitteraturen för denna kurs. Att förstå hur denna kod är uppbyggd, och att följa de riktlinjer som ges i denna kod är avgörande för att få godkänt på laborationerna. Kursen ger betyg U/3/4/5 Kursansvarig: Anders Fröberg (anders.froberg@liu.se) Kursassistent: Sahand Sadjadee sahand.sadjadee@liu.se Examinator: Henrik Eriksson

TDP024 In a nutshell I examensordningen står det att för alla kandidatexamina skall bland andra följande mål uppnås: (Även andra examina än kandidatexamina har nästan identiska mål) 1. visa förmåga att söka, samla, värdera och kritiskt tolka relevant information i en problemställning samt att kritiskt diskutera företeelser, frågeställningar och situationer 2. visa sådan färdighet som fordras för att självständigt arbeta inom det område som utbildningen avser 3. visa förmåga att självständigt identifiera, formulera och lösa problem samt att genomföra uppgifter inom givna tidsramar 4. visa förmåga att muntligt och skriftligt redogöra för och diskutera information, problem och lösningar i dialog med olika grupper 3

TDP024 Förändringar Laborationer och betyg 5Hp Individuell rapport och seminarier 1Hp Sök och välj ut tre bra forskningsartiklarna relaterade till kursens innehåll. Skriv en och analys av alla tre artiklarna på en A4-sida vardera. Värdera varje artikel - Varför är den bra 4

TDP024 Laborationer/Scenarion Laborationerna genomförs i par, registrering via webreg. Salarna Linux maskiner (nytt för i år ), eller egen dator. Vi använder Netbeans IDE för utveckling. OBS: Registrering i webreg måste göras snarast eftersom ni inte får tillgång till alla tjänster utan detta. 5

1 Kan du utveckla en iphone app åt oss? 2 Vi skulle behöva en till Android också Absolut, inga problem alls. ok iphone app Objective-C If(a = b) else. Android App Java If(a = b) else. 6

Det börjar ta fart det här. Kan du göra en desktop applikation och en webbsida också? Android App Java If(a = b) else. 7 mmm Desktop Winforms If(a = b) else. Webbsida Python If(a = b) else. iphone app Objective-C If(a = b) else.

Vi har pratat med våra kunder, de tycker att a skall vara lika med b Fyra applika*oner, alla skriva i olika språk som nu skall ändra sin logik. Sedan måste jag uppdatera mina applika*oner *ll Play och Appstore, webbservern skall uppdateras och alla som har installerat programmet på sin desktop måste också uppdatera Vad var det nu DRY stod för igen? 8

Multi-tier Dela upp data och vy Backend (Java) If (a == b) else. HTTP Ändrar på ett ställe, i ett språk och behöver inte uppdatera klienterna. Android App Visar bara resultat av operation iphone app Visar bara resultat av operation Vi ångrade oss, kan a vara lika med b istället Desktop Visar bara resultat av operation Webbsida Visar bara resultat av operation 9

Kunderna älskar applikationerna, vi har tänkt att vi ska ha försäljning i applikationerna. Fixar du kreditkortsbetalningar? PCI security standards är komplicerade. Det kräver ak de synar mina system i sömmarna och ak jag lär mig allt om deras krav. Kanske måste jag certifiera mina applikationer varje år? 10

Företag KreditKort AB Ge oss 2kr för varje transaktion, så fixar vi betalningarna åt dig. Vi är redan PCI certifierade. Taget 2kr är det värt. Jag kopplar ihop min backend med eran tjänst. Kreditkortstjänst HTTP Backend 11

Allt fungerar superbra Jag råkade köpa ett C++ bibliotek för 50000kr och min chef kommer nog inte bli glad om vi inte använder det. Kan du få in det någonstans i systemet? Min backend är skriven i Java och jag kan väldigt lite om C++ 12

Undrar vilka dependencies deras C++ bibliotek har på andra bibliotek, O/S, etc Det finns ju native i Java som kanske kan köra C++ koden, men jag är inte säker hur stabilt det är. Vad händer om de ändrar i C++ koden? Vad var det KISS stod för nu igen? 13

Använd kompetensen inom företaget Jag kan C++, ge mig biblioteket så skapar jag en tjänst som du kan anropa via en URL och HTTP. Bra Då slipper jag bry mig om alla detaljer som jag ändå inte kan Backend HTTP C++ tjänst 14

SOA Service Oriented Architecture Outsourcing av moduler inom och utom företaget Backend i Java C++ tjänst Kreditkortstjänst Skriven i något språk som vi inte vet eller bryr oss om. 15

16 Intermezzo SOA och HTTP Det är inte nödvändigt att använda HTTP i SOA. Man kan använda vad som helst för system för att kommunicera över nätverk. System som CORBA, DCOM har använts förr men visar sig vara onödigt komplicerade. De är inte heller framtidskompatibla, (CORBA i iphone?) Vi använder HTTP i våra SOA tjänster, och det är det vanligaste att man gör idag. Dock måste man tänka på att existerande tjänster kan ha utvecklats under en period då CORBA eller DCOM var populärt.

Intermezzo REST och SOAP REST Vi anropar vår backend genom att konstruera URL:er GET example.com/account/124/ username Returvärde ofta i JSON eller XML Om man vill skicka med parametrar gör man det som vanligt: GET example.com/account?id=3 SOAP Ett strikt protokoll där information skickas fram och tillbaka med XML POST example.com. xml dokument XML dokumentet beskriver vilken metod som skall exekveras och vilka parametrar som skickas. 17

Intermezzo REST och SOAP - Hybrid Det vanliga är att man blandar dessa lite, en slags hybrid. Amazon EC2 och Route 53 använder en hybrid där man ibland skickar skickar en begäran som liknar REST och får tillbaka XML men ibland måste författa ett XML dokument (dock inte enligt SOAP standarden). Twitter har något de kallar GET Search, där man själv kan knopa ihop en url för att få tillbaka en twitter feed i JSON. http://search.twitter.com/search.json?q=rest 18

Intermezzo REST och SOAP - Denna kurs I denna kurs använder vi REST. SOAP är onödigt komplicerat och håller på att fasas ut i många stora system. Vi använder parametrar in i våra tjänster och får ut JSON (som Twitter GET search). http://www.example.com?id=5 { id :5, content : Hello World } Backend i Java 19

20 SOA - Principer SOA har inget bibliotek, API, kontrakt eller regelverk som man måste följa. SOA är ett sätt att dela in ett system i små delar som alla kan kommunicera. Hur man gör detta är upp till individen eller företaget. Trots detta finns det några riktlinjer, eller principer, som man bör följa för att lyckas med sin SOA. Notera dock att SOA tjänster har utvecklats de senaste 10-20 åren, och man kan i verkligheten stöta på äldre SOA tjänster som inte följer dessa principer.

SOA Principer - Kontrakt En tjänst behöver någon typ av dokumentation som talar om hur man anropar tjänsten. http://docs.amazonwebservices.com/ AWSEC2/latest/APIReference/ 21

SOA Principer Abstraction and Autonomy Tjänsten skall ha full kontroll över sin egen logik och hålla den gömd från klienten (gömd som i abstraherad). SOA Tjänst Email Jag älskar min nya email tjänst. Skickar 10000 email utan problem. Jag vet inte hur det fungerar, men mejlen kommer fram. Jag knopar bara ihop en URL och anropar den från min tjänst. Oh no, jag visste att jag skulle automatiserat detta. Nu får jag sitta hela natten och skicka 10 000 email. Men kunden märker inget Skicka 10000 email 22

SOA Principer - Stateless Tjänsten skall vara stateless Kräver lite fler bilder à 23

Vi håller på att utöka vårt utbud, kan du skapa en kundvagn? Det finns ju Sessions i min server mjukvara, på så vis kan servern automatiskt hålla reda på vem som är vem, och jag kan lagra varor i sessionsdata Backend Jag vill inte spara korgen i databasen, då får jag massor med död data då användare fyller korgar och inte checkar ut Spara sessionsdata på servern som kommer ihåg användare mellan anrop och sparar deras kundvagn 24

Vi har precis skaffat pengar till en tv--reklam, räkna med 3-5 gånger så mycket trafik som vanligt Det borde inte vara något problem om jag startar några extra servrar, skalar ut, och sätter en loadbalancer mellan dessa 25

1 2 En klient lägger till en vara i sin kundvagn En klient lägger till en vara i sin kundvagn Klient Klient Load--Balancer Load--Balancer Backend Server 1 Backend Server 2 Backend Server 1 Backend Server 2 Kommer ihåg varor i kundvagnen Kommer ihåg varor i kundvagnen Har aldrig sett denna klient,ny kundvagn 26

Server 1 Server 2 Load Balancer Skicka hela kundvagnen när det är dags att checka ut Klienten ansvarar för att ha en kundvagn Ser jag till att min backend inte minns varje anrop så har jag statelessness, och då blir det lättare att skala bakom en load-balancer vid hög trafik 27

SOA Principer - Summering 1. Contract 2. Abstraction 3. Autonomy 4. Stateless 28

Amazon SOA Case Amazon är idag ett av de företag som verkligen satsat på SOA och det är hjärtat i deras Amazon Elastic Cloud och andra molntjänster. Via deras tjänster kan man starta och stoppa servrar från sin kod. Skapa och hyra databaser, sköta DNS routing, spara filer i CDN och hyra load-balancers mm. De har väldokumenterade tjänster som används världen över. Att sätta upp tre servrar på tre olika kontinenter och sätta en load-balancer mellan dessa kan göras på några sekunder från sin kod eller via webbinterface. 29

30 Amazon SOA Case Det påstås att när Jeff Bezos (grundare) tog beslutet att företaget skulle satsa på SOA (2002) så slogs följande fast: 1. 2. 1. All teams will henceforth expose their data and functionality through service interfaces. 2. Teams must communicate with each other through these interfaces. 3. 3. There will be no other form of interprocess communication allowed: no direct linking, no direct reads of another team s data store, no shared-memory model, no back-doors whatsoever. The only communication allowed is via service interface calls over the network. 4. It doesn t 4. matter what technology they use. HTTP, Corba, Pub-Sub, custom protocols doesn t matter. Bezos doesn t care. 5. 5. All service interfaces, without exception, must be designed from the ground up to be externalizable. That is to say, the team must plan and design to be able to expose the interface to developers in the outside world. No exceptions. 6. Anyone who doesn t do this will be fired. Ref: http://blog.yohanliyanage.com/2012/03/getting-soa-right-thinking-beyond-the-rightangles/

Backend SOA Tjänst Egentligen flera lager Backend DB, DATA, LOGIC, EXPOSURE (WEB) MySQL. MongoDB, LDAP, etc DB DATA SOA TJänster LOGIC EXPOSURE (WEB) 31 Klienter kan vara webbsidor, desktop/mobil applikationer, andra SOA tjänster, ATM, parkeringsautomater etc.. Konsument Konsument

Enterprise Systems Ett system, många tjänster och vyer SOA Multi-tier Backend DATA LOGIC EXPOSURE Kreditkorts tjänst C++ tjänst 32

Inte bara Java Vi använder Java i denna kurs. Men det går att utveckla för SOA med vilket språk som helst (som har något form av nätverksstöd). Det är den frihet man vill uppnå med SOA, att inte tvinga på något språk eller verktyg. Tänk genom hela kursen: Hur hade jag gjort detta i språk X med ramverk Y? Poängen med den här kursen är att förstå arkitekturen och de problem som uppstår när man vill använda sig av just SOA. 33

Varför Java? Utan tvekan det mest använda språket för Enterprise Systems idag. Vore oansvarigt att inte ge en introduktion till Java EE som del av en komplett utbildning inom programmering och/eller datavetenskap. Även om Oracle äger Java och därmed Java EE så har bland andra följande företag stort inflytande över utvecklingen tack vare stora investeringar av tid, utvecklare och pengar: Credit Suisse, Google, VM Ware, Eclipse Foundation, Hewlett- Packard, Ericsson, IBM, RedHat, Fujitsu, Intel, SAP 34

Java Java SE Själva språket Java, dess syntax och standardbibliotek. Innehåller kompilator och andra verktyg. Koden kompileras till bytekod som exekveras i en virtuell maskin (JVM) Java EE Bibliotek för att bygga enterprise system. Server för tjänster att köra på. De delar som behövs för att lösa vanliga problem vid ES utveckling. 35

Laboration 1 Exakta instruktioner finns på kurshemsidan. Viktigt med Webreg. Ni laddar ner ett kodskelett från hemsidan. Detta är ett antal Netbeans projekt som innehåller de delarna ni behöver för att utveckla data, logic och web. Vi kommer i följande föreläsningar titta på exakt hur dessa utvecklas. Läs komma igång instruktioner på kurshemsidan, lite små viktigt för att tjänsterna skall fungera korrekt. 36

Sonar Här kan ni logga in och se code-coverage samt analyser av er kod. Sonar Här hamnar alla era loggar, ni kan logga in och se logg output för er tjänst Ni ska kontinuerligt skicka in er kod till Sonar. Monlog Den tjänst ni utvecklar Banks Persons 37

Laboration 2 och 3 Laboration 2 ger betyg 4 Handlar om felhantering Laboration 3 ger betyg 5 Handlar om säkerhet Redovisning sker genom muntlig presentation i laborationssalen till er assistent samt manuell genomgång av er kod av kursledning (kolla hemsidan för mer detaljer). 38

39 Abstraktion

TDP024 Enterprise Systems Program to an Interface och Dependency Injection Anders Fröberg Institutionen för Datavetenskap (IDA)

Program to an interface Program to an interface är en metod att organisera och bygga sitt system på som är grundläggande för alla system som skall vara modulära och hållbara. För en programmerare är det bland de viktigaste kunskaper man kan ta med sig in i ett projekt. Projekt som väljer enklare metoder, eller hittar genvägar runt, har en drastiskt förkortad livslängd. Det är på abstraktionsnivån programmering som denna metod befinner sig, inte på samma abstraktionsnivå som SCRUM eller arkitektur, etc. 41 2

Program to an interface I den här kursen är det omöjligt att klara laborationerna utan att ha förståelse för program to an interface. Eventuella avvikelser från metoden i laborationerna kommer ge komplettering. I arbetslivet är det en självklarhet att man har denna kunskap med sig, och deltar man i ett projekt som inte använder sig av program to an interface ska man kämpa för att de börjar med det. 42 3

Program to an interface I den korthet: här kursen är det omöjligt att klara laborationerna Systemet man bygger utan att skall ha förståelse knytas samman för program och bero to på an interface. kontrakt mellan olika delar. Eventuella Det skall inte avvikelser bero på från en viss metoden implementation. i laborationerna kommer ge komplettering. T ex. ett system skall vara beroende på sorterar en lista, inte på bubble sort. I Att arbetslivet sortera en är det lista en är ett självklarhet kontrakt, jag att säger man till har ett denna annat system kunskap sortera med sig, denna och deltar lista och man får i ett tillbaka projekt en som inte sorterad använder lista. Det sig av spelar program dock inte mig to an någon interface roll hur ska detta man gick kämpa till, jag för har att skrivit de börjar kod som med jobbar det. mot kontraktet inte mot en viss implementation av kontraktet. 43 34

Program to an interface public interface Sort { } List sort(list list); public class BubbleSort implements Sort { public List sort(list list) { } } //Do bubble sort När jag skriver kod så jobbar jag mot interfacet, jag vet att alla klasser som uppfyller kontraktet kommer ha en funktion som heter sort och tar en lista och returnerar en lista. public class QuickSort implements Sort { public List sort(list list) { } } //Do quick sort 44 5

Program to an interface public interface Sort { } List sort(list list); När någon sedan kommer fram till en snabbare sorteringsalgoritm så behöver jag inte ändra i min kod, för den är skriven mot ett kontrakt, inte mot en implementation. public class BubbleSort implements Sort { public List sort(list list) { } } //Do bubble sort public class QuickSort implements Sort { public List sort(list list) { } } //Do quick sort public class QuantSort implements Sort { public List sort(list list) { } } //Do quick sort 45 6

Program to an interface public class ListUtils { private Sort sort; Interface, det står inte: private BubbleSort sort; public List findsmallest(list list) { list = sort.sort(list); return list.get(0); } } Använder en metod som jag vet finns enligt kontraktet, oavsett vilken implementation jag använder. That s a null pointer exception 46 7

Dependency Injection public class ListUtils { private Sort sort; public ListUtils(Sort sort) { this.sort = sort; } ListUtils väljer inte vilken implementation den skall använda. I sin konstruktor så accepterar den en instans av en implementation. (Notera att vi fortfarande endast använder interfaces). public List findsmallest(list list) { list = sort.sort(list); return list.get(0); } Detta kallar vi dependency injection det består alltså av en klass som har en instansvariabel som blir satt i konstruktorn. } 47 8

Dependency Injection public static void main(string [] args) { ListUtil listutil = new ListUtil(new QuickSort()); int min = listutil.findsmallest([21,13,55,34]) } Någon gång måste man välja implementation, i detta fall är det koden som skapar ett nytt objekt av ListUtil som måste välja vilken implementation som skall användas. För den intresserade så går det även att få bort detta beroende. Med hjälp av Inversion of Control kan man få program to an interface on steroids. Du anger aldrig vilken implementation som skall användas i koden, utan detta löses runtime från t ex en XML fil som säger vilken implementation av Sort som skall användas just nu. 9 Vi har inte tid med Inversion of Control i denna kurs, men det rekommenderas till den intresserade. 48

Program to an interface Enhetstestning drar också stora fördelar från att fokusera på kontrakt snarare än implementation. Test the contract, not the implementation Om vi skriver våra test mot kontrakt så kan vi testa oändligt många implementationer av samma kontrakt. Om någon kommer och påstår att de har en ny implementation som är bättre, så kan man testa implementationen mot redan existerande tester. 49 10

Program to an interface public class Test { //--- Unit under test ---// private Sort sort = new BubbleSort(); //----------------------// Koden i testet är oberoende av implementationen. Innan vi kör testet kan vi byta implementation. public void test() { List a = [4,3,5,2,6]; List b = sort.sort(a); Assert.assertTrue(b[0] == 2); } Om någon kommer och påstår att de har en bättre implementation, så tar vi deras kod och instansierar deras lösning istället. } Testen är exakt desamma. 50 11

Data Logic - Web Logik Data och Logik teamen sitter tillsammans och kommer överens om ett API (dvs ett kontrakt) för vilka funktioner som kommer behövas från datalagret. Som en del av detta arbete så skrivs också alla tester, dvs alla tester som måste vara uppfyllda för att logik teamet skall känna sig trygga i att använda data lagret. Data API Tests 51 12

Data Logic - Web Logik Data API API Tests Tests Data teamet tar sin kopia av kontrakt och tester och börjar sedan implementera. De är helt oberoende av alla andra delar av projektet. Och resten av projektet är helt oberoende av deras implementationsdetaljer. 52 13

Logik Data Logic - Web Web API Data Tests API Tests Web och logik teamen gör precis samma sak. De kommer överens om ett kontrakt för kommunikation mellan web och logiklagret. I denna process skrivs även tester. API Tests 53 14

Web Data Logic - Web API Data API Tests Tests Logik 16 Logiklagret kan skriva all sin kod så att den uppfyller kontraktet mot web. Eftersom logiklagret ALLTID jobbar mot kontraktet så behöver man inte vänta på en implementation från datalagret. API Tests Men hur kan man testa sin logik utan att kunna skapa instanser av de kontrakt som data lagret ska leverera? Måste man vänta på att data lagret blir klara? 54 Data

Data Logic - Web API Data Logik Tests Web API Tests API Tests Data Nu har logik lagret ett kontrakt som de vet kommer bli uppfyllt (samt tester). Och de har ett kontrakt som de skall uppfylla (samt tester). 55 15

Web Data Logic - Web API Data API Tests Tests Logik API Tests Data Just fake it Logik lagret har ju kontrakten från data lagret, de kan skapa sitt egna lilla fejk datalager som de kan använda för att testa med. 17 Detta kallas ofta mocking eller creating mock objects 56

Mock objects - Mocking public class Test { } //--- Unit under test ---// private Sort sort = new Sort() { public List sort(list sort) { return [2]; } } //----------------------// public void test() { List a = [4,3,5,2,6]; List b = sort.sort(a); Assert.assertTrue(b[0] == 2); } Så vi skapar en egen implementation av Sort (till dess att data lagret är klara med sin) som vi kan testa med. Den behöver inte vara bra, så länge den gör vad den ska. När data lagret sedan är klara så stoppar vi in deras implementation istället. 57 18

Data Logic - Web Web Logik Data Web implementation API Tests Logic implementation API Tests DB implementation När alla delar är på plats så har man ett system som är modulärt och hållbart. De olika implementationerna är endast beroende på kontrakten. 58 19

Data Logic - Web Web Logik Data Web implementation API Tests Logic implementation API Tests DB implementation Om datalagret får för sig att byta sin implementation till t ex. ett system som sparar i en molntjänst istället för på lokal databas, eller vill helt plötsligt börja spara i flat-files, så spelar det ingen roll för de andra. Så länge datalagret lovar att upprätthålla kontraktet och testerna så behöver ingen ändra sin kod. Cloud implementation 59 20

Data Logic - Web Även inom data lagret är det smidig att testa nya implementationer (eftersom de redan har tester). Data Antag att ett av biblioteken som data lagret använder uppdateras från 1.0 till 2.0, och mycket har ändrats i den nya versionen. Istället för att börja ändra i sin existerande implementation så skapar man en ny, som är helt baserad på 2.0, men testerna är de samma. När man väl är färdig med implementationen (och den passerar alla tester) så kan man byta ut den gamla utan att någon behöver ändra på sin kod. API Tests DB 1.0 implementation DB 2.0 implementation 60 21

www.liu.se