Kryssplatform mobilutvikling

  • 609 views
Uploaded on

Slides fra et kurs jeg holdt for Abakus om Kryss-platform mobilutvikling

Slides fra et kurs jeg holdt for Abakus om Kryss-platform mobilutvikling

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
609
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Kryssplatform mobilutvikling Med .Net og Mono
  • 2. Agenda• Intro, hvorfor kryssplatform• Intro til .Net og Mono (veldig kort!)• CrossBox v1• Pause – vi deler ut en billett til TDC• Patterns og arbeidsmåter som hjelper oss• CrossBox v2• Oppsummering (og litt mer kode hvis tid)
  • 3. Kort om Capgemini• Internasjonalt konsulenthus – 112.000 ansatte (!) – Ca 750 i Norge – Ca 60 i Trondheim• Leverer Consulting, Teknologi og Outsourcing• Fokus på et sterkt fagmiljø – Gode fagfolk – Gode muligheter for faglig utvikling
  • 4. Rune da?• Spesialist på .Net• Veldig interessert i mobile løsninger• Har fått en relativt «fri» stilling i Capgemini – Bruker mye tid på ny teknologi – Forskning, prøve ut nye metoder – Målet er å bygge kompetanse på kommende teknologi
  • 5. Kryssplatform?
  • 6. Kryssplatform?• Gjenbruke mest mulig kode på tvers av platformene – Dekker ikke alle platformer, fokuserer på de store • iOS, Android og Windows Phone – Ikke Symbian, Blackberry eller Bada • For små eller døende...
  • 7. Kryssplatform?• Hvilke valg har vi? – Native kode fungerer ikke • Objective C, Java, .Net – HTML5 og Javascript • Fungerer, men hvor godt? • Facebook! HTML5 stinker... – Mono og .Net • Gir native apper • Kodes i C# mot .Net framework
  • 8. Kryssplatform?• Hvorfor .Net og Mono i stedet for «vanlig» native? – Nok å kunne ett språk, C# • I stedet for ObjectiveC, Java og C# – Lett å gjenbruke kode – Billigere – Lettere å teste
  • 9. Noen ulemper• Må sikte på felles egenskaper – Egenskaper som bare finnes på en platform kan ikke støttes (uten videre) – F.eks. tiles på WP7 – Eksotisk Android-hardware – iPhone addons• Du trenger to maskiner / to OS – PC / Windows for WP7 / Android – Mac for iOS / Android
  • 10. Eksempler• Kolumbus Sanntid
  • 11. Eksempler• Bussøyet!
  • 12. Kryssplatform ala Rune• Vi må først velge platform vi sikter på – Typisk: • iOS / iPhone • Android-telefoner • Windows Phone 7 (7.5) – Kanskje: • iPad • Android tablets • Windows 8 / Metro
  • 13. Kryssplatform ala Rune• Starter med .Net, C# – Starter med kode kompilert mot desktop .Net • Skrive testbar kode • Enhetstester – Implementerer så på WP7 siden det er lettest • GUI for WP7 – Så bruker vi Mono! • Først Android siden den kjører på PC/Windows
  • 14. Kryssplatform ala Rune• Til slutt MonoTouch – iOS. Krever en Mac så vi må bytte...• Andre versjoner – Metro / Windows 8? • Kan bruke C# og .Net – iPad og Android tablets • MonoTouch og Mono for Android
  • 15. CrossBox!... men den kommer vi tilbake til
  • 16. Intro til... tidenes korteste ...
  • 17. .Net• .Net er et rammeverk og en platform• Kjører i en virtuell maskin – Common Language Runtime (CLR) – Standardisert og åpen spesifikasjon• Støtter mange språk – C#, VB.Net, F#, C++, osv.• Svært stort og rikt rammeverk – Veldig mye funksjonalitet innebygd
  • 18. C#• Et typesikkert og objektorientert språk• Inspirert av C++ og Java – Men rikere samtidig som det er enklere• LINQ – Language integrated query – Async• Åpen spesifikasjon
  • 19. Intro til Mono... veldig kjapp denne også ...
  • 20. Mono• Mono er en open source implementasjon av .Net-rammeverket• Kjører på Linux, Mac, Windows – iOS, Android – Diverse rare platformer: Wii, PS3, Amiga OS, +++• Ganske kompatibel, men ikke 100%• MonoDevelop er en open source editor som kjører på Mono
  • 21. Mono for Android• Kjører på Android i parallell med Java-VM’en• Nesten komplett versjon av Mono – Støtter avanserte features som Reflection og kodegenerering• Kan bruke Java-klasser og dele ut komponenter med Java
  • 22. MonoTouch (iOS)• Kompilerer C# til native kode – Noen begrensninger – Ikke kodegenerering – Svakheter i generics• Kan kalle ObjC-biblioteker og native kode
  • 23. Windows Phone 7• Kjører en nedskalert versjon av Silverlight• Bare asynkrone versjoner av API – Gir mer responsive applikasjoner• Mangler noen av funksjonene i .Net framework• Begrensninger i reflection
  • 24. Kryssplatform .Net• Må se på hvilke platformer man vil støtte – Gå for et minste felles multiplum• Starte på WP7 og unngå kodegenerering – 99% sikker at koden kjører på alle platformer• Bør unngå GUI-komponenter i koden• Abstrahere trådhåndtering dersom det er nødvendig
  • 25. KODE! ... endelig ...(men ikke gjør dette hjemme)
  • 26. Hvordan lagde vi appen?• Bruker DropNet for integrasjon mot DropBox – Kjører på alle tre platformene – Må registrere app key hos DropBox• DropNet dekker ikke GUI for autentisering – Vise webside med riktig URL – Tre forskjellige måter å gjøre dette på – Lager et interface som beskriver operasjonen – Implementerer på hver plattform
  • 27. Programmere mot interface• Dette er lurt!• Interface gir operasjonene – Men vi bryr oss ikke om hvordan de fungerer – Gjør ingen ting at utførelsen er forskjellig• Muliggjør mer gjenbruk
  • 28. Svakhetene med løsningen• Ikke testet• For lite gjenbruk av kode• Er vi sikre på at oppførselen er lik på alle platformer?• Dårlig skille mellom GUI og «forretningslogikk»
  • 29. PAUSE! hvem blir med på TDC?
  • 30. Svakhetene med løsningen• Ikke testet• For lite gjenbruk av kode• Er vi sikre på at oppførselen er lik på alle platformer?• Dårlig skille mellom GUI og «forretningslogikk»
  • 31. Mål for versjon 2• Enhetstester av all funksjonalitet• Gjenbruke all forretningslogikk• Native GUI for hver platform• Tydelig skille mellom presentasjon og modell
  • 32. Noen verktøy• MVVM – patternet• Enhetstester, NUnit• MVVM – bibliotek, MVVMCross
  • 33. MVVM• Model View ViewModel – (verdens mest krøkkete navn!) – Baserer seg på MVC• Skiller mellom – Model – dataene som skal presenteres – View – presentasjonen av dataene – ViewModel – En logisk modell av view som beskriver oppførsel
  • 34. MVVM• ViewModel skal – Være testbar – Beskrive all oppførsel – Være gjenbrukbar – Innkapsle data – Ikke ha knytninger til presentasjon – Varsle om endringer
  • 35. MVVM• View skal – Bare bry seg om presentasjon – Være platformspesifikk – Knyttes mot en ViewModel – Helst ikke ha kode som beskriver oppførsel • Men det er lov å synde :-)
  • 36. MVVM• Model skal – Beskrive data – Være enkel – Ikke beskrive oppførsel
  • 37. MVVM• I tillegg trenger vi – Services • IDropBoxClient er et eksempel – Converters • Konverterer f.eks. en boolean til et Visibility-objekt – Infrastructure • Oppsett av applikasjon • Navigasjon • Osv.
  • 38. Hvor brukes MVVM?• WPF• Silverlight• Windows Phone• Windows 8 / WinRT• Web / HTML5 – Knockout.js, KendoUI• MVVMCross – iOS, Android
  • 39. MVVMCross• Kryss-platform MVVM-bibliotek – Open source• Kjører på – WP7 – MonoTouch – Mono for Android – WinRT – Desktop (for testing)
  • 40. MVVMCross• Gjør det mulig med MVVM på platformene den støtter• Noen begrensninger – Litt umoden – Litt tungvint på iOS – Trenger kanskje litt tilpasninger
  • 41. (veldig kort om) Enhetstesting• Bruker Nunit• Tester oppførsel for ViewModels• Lager Mock-objekter for tjenester – IDropBoxClient• Kjører på desktop• Tester ikke UI og platformspesifikk kode – Det er mulig, men vi har ikke tid i dag :-)
  • 42. KODE! ... igjen ...(og denne gangen blir det bedre)
  • 43. Oppsummering• Vi har laget en kryss-platform DropBox-klient – Bruker .Net og Mono – DropNet for integrasjon mot DropBox – Egen interface for å abstrahere vekk implementasjon – Enhetstester – MVVM-patternet – MVVMCross
  • 44. Ressurser• Last ned koden på GitHub: – https://github.com/runegri/CrossBox• Test MVVMCross: – https://github.com/slodge/MvvmCross• NUnit: – http://www.nunit.org/• Intro til MVVM fra StackOverflow: – bit.ly/8EVvwN
  • 45. Ta kontakt!• Twitter: @runegri• GitHub: https://github.com/runegri/• Epost: – rag@rag.no – rune-andreas.grimstad@capgemini.com• Presentasjonen kommer på SlideShare