TDP024 Enterprise Systems

Relevanta dokument
TDP024 Enterprise Systems

TDP024 Enterprise Systems

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

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)

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

Systemutvecklare SU14, Malmö

TDDD80 Mobila och sociala applikationer. Kursintroduktion

Webbtjänster med API er

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

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

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

Grundkurs i programmering - intro

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

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

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

Programvaruteknik, hp

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

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

Android översikt. TDDD80 Mobila och sociala applikationer

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

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

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

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:

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

Distribuerade affärssystem

TDDC77 Objektorienterad Programmering

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

Distribuerade System, HT03

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.

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

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

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

Classes och Interfaces, Objects och References, Initialization

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.

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

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

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

Webbprogrammering. Sahand Sadjadee

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

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

TDDD80 Mobila och sociala applika1oner. Kursintroduk1on

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

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

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

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

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

TDDD80 Mobila och sociala applikationer. Kursintroduktion

Arkitektur. Den Röda Tråden

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

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

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Föreläsning 1 & 2 INTRODUKTION

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

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

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

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

Trådar. Aktiva objekt

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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

Webbtjänster med API er

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

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

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

Objektorienterad programmering D2

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

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

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

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

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

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

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

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

PROGRAMMERINGSTEKNIK TIN212

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering

TDDC77 Objektorienterad Programmering

Design och konstruktion av grafiska gränssnitt

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Föreläsnings 9 - Exceptions, I/O

Software Technology. Josef Svenningsson

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

TENTAMEN OOP

Transkript:

TDP024 Enterprise Systems Introduktion, ES, SOA, Multi-Tier Anders Fröberg Institutionen för vetenskap (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 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 3 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. 1 Kan du utveckla en iphone app åt oss? Absolut, inga problem alls. 2 ok Vi skulle behöva en till Android också iphone app Objective-C If(a = b) else. Android App Java If(a = b) else. 5 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. 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. mmm Webbsida iphone app Objective-C If(a = b) else. 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 7 Desktop Winforms If(a = b) else. Python If(a = b) else. 8 Vad var det nu DRY stod för igen?

Multi-tier Dela upp data och vy (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 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? Vi ångrade oss, kan a vara lika med b istället Desktop Visar bara resultat av operation Webbsida Visar bara resultat av operation 9 10 Företag KreditKort AB Ge oss 2kr för varje transaktion, så fixar vi betalningarna åt dig. Vi är redan PCI certifierade. Kreditkortstjänst HTTP Taget 2kr är det värt. Jag kopplar ihop min backend med eran tjänst. 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++ 11 12

13 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. Jag kan C++, ge mig biblioteket så skapar jag en tjänst som du kan anropa via en URL och HTTP. Använd kompetensen inom företaget Bra Då slipper jag bry mig om alla detaljer som jag ändå inte kan Vad händer om de ändrar i C++ koden? Vad var det KISS stod för nu igen? HTTP C++ tjänst 14 15 C++ tjänst SOA Service Oriented Architecture Outsourcing av moduler inom och utom företaget Kreditkortstjänst Skriven i något språk som vi inte vet eller bryr oss om. i Java 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. 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 17 18 19 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 i Java { id :5, content : Hello World 20 SOA - Principer SOA har inget bibliotek,, 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/Reference/ 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 21 22 SOA Principer - Stateless Tjänsten skall vara stateless 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 Kräver lite fler bilder à 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 23 24

25 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 1 2 En klient lägger till en vara i sin kundvagn Klient Load--Balancer En klient lägger till en vara i sin kundvagn Klient Load--Balancer Server 1 Server 2 Server 1 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 SOA Principer - Summering 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 1. Contract 2. Abstraction 3. Autonomy 4. Stateless 27 28

29 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. 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/ SOA Tjänst Egentligen flera lager DB, DATA, LOGIC, EXPOSURE (WEB) Enterprise Systems Ett system, många tjänster och vyer SOA MySQL. MongoDB, LDAP, etc SOA TJänster DB DATA LOGIC EXPOSURE (WEB) Multi-tier DATA LOGIC EXPOSURE Kreditkorts tjänst C++ tjänst 31 Klienter kan vara webbsidor, desktop/mobil applikationer, andra SOA tjänster, ATM, parkeringsautomater etc.. Konsument Konsument 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. 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 33 34 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 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. 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. 35 36

37 Sonar Sonar Här kan ni logga in och se code-coverage samt analyser av er kod. Här hamnar alla era loggar, ni kan logga in och se logg output för er tjänst 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). Ni ska kontinuerligt skicka in er kod till Sonar. Monlog Den tjänst ni utvecklar Banks Persons 38 Abstraktion TDP024 Enterprise Systems Program to an Interface och Dependency Injection Anders Fröberg Institutionen för vetenskap (IDA) 39

Program to an interface 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. 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. 41 42 2 3 Program to an interface Program to an interface I den korthet: här kursen är det omöjligt att klara Systemet laborationerna 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. 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 av kontraktet. public interface Sort { List sort(list list); 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 BubbleSort implements Sort { public List sort(list list) { //Do bubble sort public class QuickSort implements Sort { public List sort(list list) { //Do quick sort 43 44 34 5

Program to an interface 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. 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 public class ListUtils { private Sort sort; public List findsmallest(list list) { list = sort.sort(list); return list.get(0); That s a null pointer exception Interface, det står inte: private BubbleSort sort; Använder en metod som jag vet finns enligt kontraktet, oavsett vilken jag använder. 46 6 7 Dependency Injection Dependency Injection public class ListUtils { private Sort sort; public ListUtils(Sort sort) { this.sort = sort; ListUtils väljer inte vilken den skall använda. I sin konstruktor så accepterar den en instans av en. (Notera att vi fortfarande endast använder interfaces). 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, i detta fall är det koden som skapar ett nytt objekt av ListUtil som måste välja vilken som skall användas. 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. 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 som skall användas i koden, utan detta löses runtime från t ex en XML fil som säger vilken av Sort som skall användas just nu. 8 47 9 Vi har inte tid med Inversion of Control i denna kurs, men det rekommenderas till den intresserade. 48

Program to an interface Program to an interface Enhetstestning drar också stora fördelar från att fokusera på kontrakt snarare än. Test the contract, not the Om vi skriver våra test mot kontrakt så kan vi testa oändligt många er av samma kontrakt. Om någon kommer och påstår att de har en ny som är bättre, så kan man testa en mot redan existerande tester. public class Test { //--- Unit under test ---// private Sort sort = new BubbleSort(); //----------------------// public void test() { List a = [4,3,5,2,6]; List b = sort.sort(a); Assert.assertTrue(b[0] == 2); Koden i testet är oberoende av en. Innan vi kör testet kan vi byta. Om någon kommer och påstår att de har en bättre, så tar vi deras kod och instansierar deras lösning istället. 49 Testen är exakt desamma. 50 10 11 Logic - Web Logic - Web Logik och Logik teamen sitter tillsammans och kommer överens om ett (dvs ett kontrakt) för vilka funktioner som kommer behövas från datalagret. Logik 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. 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 sdetaljer. 51 52 12 13

Logik Logic - Web Web Web Logic - Web 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. Logik 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 från datalagret. 53 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 14 16 Logic - Web Web Logic - Web Logik Logik Web Just fake it 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). 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. 15 55 17 Detta kallas ofta mocking eller creating mock objects 56

Mock objects - Mocking Logic - Web 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 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 istället. 57 Web Web Logik Logic DB När alla delar är på plats så har man ett system som är modulärt och hållbart. De olika erna är endast beroende på kontrakten. 58 18 19 Logic - Web Logic - Web Web Logik Även inom data lagret är det smidig att testa nya er (eftersom de redan har tester). 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. Web Logic Om datalagret får för sig att byta sin 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. DB Cloud 59 Istället för att börja ändra i sin existerande 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 en (och den passerar alla tester) så kan man byta ut den gamla utan att någon behöver ändra på sin kod. DB 1.0 DB 2.0 60 20 21

www.liu.se