Slide 1

Slide 1 text

Mobile design patterns Alexandra Marin @ ITAKE Unconference 2017 @xmonodev crossplatform.io

Slide 2

Slide 2 text

Hello! { } #mobile #designpatterns #itakeunconf crossplatform.io

Slide 3

Slide 3 text

Design code that runs cross-platform { crossplatform.io } #mobile #designpatterns #itakeunconf crossplatform.io

Slide 4

Slide 4 text

Overview { crossplatform.io } #mobile #designpatterns #itakeunconf crossplatform.io

Slide 5

Slide 5 text

The mobile problem { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 6

Slide 6 text

Target universal features { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 7

Slide 7 text

Enhance experience based on device capabilities { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 8

Slide 8 text

Platform-independent code with Xamarin { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 9

Slide 9 text

Platform-specific code with Xamarin { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 10

Slide 10 text

Case study #1: Different capabilities Case study #2: Different platform { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 11

Slide 11 text

Taking a selfie #mobile #designpatterns #itakeunconf crossplatform.io

Slide 12

Slide 12 text

{ crossplatform.io } #mobile #designpatterns #itakeunconf Facade design pattern crossplatform.io

Slide 13

Slide 13 text

//On platform if(deviceHasCamera) { //Take photo via Camera app //Apply resizing //Save it via File Manager } else { //Choose from gallery } { crossplatform.io } #mobile #designpatterns #itakeunconf crossplatform.io

Slide 14

Slide 14 text

{ crossplatform.io } #mobile #designpatterns #itakeunconf //Shared code camera.ReturnPhoto(); crossplatform.io

Slide 15

Slide 15 text

Save the date #mobile #designpatterns #itakeunconf crossplatform.io

Slide 16

Slide 16 text

Bridge design pattern { crossplatform.io } #mobile #designpatterns #itakeunconf crossplatform.io

Slide 17

Slide 17 text

{ crossplatform.io } #mobile #designpatterns #itakeunconf //Shared code class MyCalendar { ICalendar calendar; void SaveTheDate() { calendar.AddEvent(); } } crossplatform.io

Slide 18

Slide 18 text

{ crossplatform.io } #mobile #designpatterns #itakeunconf //iOS iOSCalendar : ICalendar { AddEvent() { //add event with //EventKit } } crossplatform.io

Slide 19

Slide 19 text

{ crossplatform.io } #mobile #designpatterns #itakeunconf //Android DroidCalendar : ICalendar { AddEvent() { //add event with //CalendarContract } } crossplatform.io

Slide 20

Slide 20 text

Inversion of Control { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 21

Slide 21 text

Service locator { crossplatform.io } #mobile #designpatterns #itakeunconf

Slide 22

Slide 22 text

//Construct on platform Locator.RegisterType (); //Use in shared code Locator.Resolve(); { } #mobile #designpatterns #itakeunconf { crossplatform.io }

Slide 23

Slide 23 text

Dependency injection { crossplatform.io } #mobile #designpatterns #itakeunconf { crossplatform.io }

Slide 24

Slide 24 text

{ crossplatform.io } #mobile #designpatterns #itakeunconf //Construct on platform IoC.RegisterType (); //Gets injected in shared class constructor public SharedClass(ICalendar cameraHelper) { crossplatform.io }

Slide 25

Slide 25 text

Summary { crossplatform.io } #mobile #designpatterns #itakeunconf { crossplatform.io } crossplatform.io

Slide 26

Slide 26 text

Ask Me Anything crossplatform.io or @xmonodev { crossplatform.io } #mobile #designpatterns #itakeunconf { crossplatform.io } crossplatform.io