• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Kryssplatform mobilutvikling
 

Kryssplatform mobilutvikling

on

  • 875 views

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

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

Statistics

Views

Total Views
875
Views on SlideShare
874
Embed Views
1

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Kryssplatform mobilutvikling Kryssplatform mobilutvikling Presentation Transcript

    • Kryssplatform mobilutvikling Med .Net og Mono
    • 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)
    • 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
    • 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
    • Kryssplatform?
    • 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...
    • 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
    • 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
    • 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
    • Eksempler• Kolumbus Sanntid
    • Eksempler• Bussøyet!
    • 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
    • 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
    • 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
    • CrossBox!... men den kommer vi tilbake til
    • Intro til... tidenes korteste ...
    • .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
    • 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
    • Intro til Mono... veldig kjapp denne også ...
    • 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
    • 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
    • MonoTouch (iOS)• Kompilerer C# til native kode – Noen begrensninger – Ikke kodegenerering – Svakheter i generics• Kan kalle ObjC-biblioteker og native kode
    • 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
    • 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
    • KODE! ... endelig ...(men ikke gjør dette hjemme)
    • 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
    • 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
    • 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»
    • PAUSE! hvem blir med på TDC?
    • 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»
    • Mål for versjon 2• Enhetstester av all funksjonalitet• Gjenbruke all forretningslogikk• Native GUI for hver platform• Tydelig skille mellom presentasjon og modell
    • Noen verktøy• MVVM – patternet• Enhetstester, NUnit• MVVM – bibliotek, MVVMCross
    • 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
    • MVVM• ViewModel skal – Være testbar – Beskrive all oppførsel – Være gjenbrukbar – Innkapsle data – Ikke ha knytninger til presentasjon – Varsle om endringer
    • 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 :-)
    • MVVM• Model skal – Beskrive data – Være enkel – Ikke beskrive oppførsel
    • 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.
    • Hvor brukes MVVM?• WPF• Silverlight• Windows Phone• Windows 8 / WinRT• Web / HTML5 – Knockout.js, KendoUI• MVVMCross – iOS, Android
    • MVVMCross• Kryss-platform MVVM-bibliotek – Open source• Kjører på – WP7 – MonoTouch – Mono for Android – WinRT – Desktop (for testing)
    • MVVMCross• Gjør det mulig med MVVM på platformene den støtter• Noen begrensninger – Litt umoden – Litt tungvint på iOS – Trenger kanskje litt tilpasninger
    • (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 :-)
    • KODE! ... igjen ...(og denne gangen blir det bedre)
    • 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
    • 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
    • Ta kontakt!• Twitter: @runegri• GitHub: https://github.com/runegri/• Epost: – rag@rag.no – rune-andreas.grimstad@capgemini.com• Presentasjonen kommer på SlideShare