Slide 1

Slide 1 text

CROSS PLATFORM REAL LIFE .NET

Slide 2

Slide 2 text

NICOLA IAROCCI CO-FOUNDER @C2K LEAD DEV @AMICA MICROSOFT MVP MONGODB MASTER CODERDOJO OPEN SOURCE TL;DR CODER AT HEART

Slide 3

Slide 3 text

REAL LIFE .NET CROSS PLATFORM SHARED PROJECTS ▸Unit of reuse: SOURCE CODE ▸Shows up in References node of Solution Explorer ▸Code treated as if it was linked into main project ▸Incorporated into each assembly referencing the project ▸Can have assets such as XAML, JavaScript files, etc. ▸Full access to .NET Framework ▸#ifdef for platform-specific code ▸Since Visual Studio 2013 Update 2

Slide 4

Slide 4 text

REAL LIFE .NET CROSS PLATFORM PORTABLE CLASSES ▸Unit of reuse: ASSEMBLY ▸Shows up References node of Solution Explorer ▸Assembly (.dll) required by referencing projects ▸Lowest common denominator of selected target platforms ▸No assets, just code ▸Platform-specific code requires Inversion of Control (IoC) ▸Since Visual Studio 2010 with Portable Library Tools 2 ▸“Informaly” deprecated in favor of .NET Standard Platform

Slide 5

Slide 5 text

REAL LIFE .NET CROSS PLATFORM .NET PLATFORM STANDARD

Slide 6

Slide 6 text

OUR GOALS REAL LIFE .NET

Slide 7

Slide 7 text

#1 WEB AND DESKTOP APPS ON MODERN .NET PLATFORMS using portable classes

Slide 8

Slide 8 text

#2 IOS, ANDROID, WINPHONE APPS ON XAMARIN using portable classes

Slide 9

Slide 9 text

#3 SYNC ALL APPS WITH OUR REST API SERVICE powered by Python, Eve and Mongo

Slide 10

Slide 10 text

#4 SUPPORT LEGACY WINFORMS AND ADO.NET ON NET4 Because… XP (yeah)

Slide 11

Slide 11 text

#5 SINGLE CODEBASE for all platforms NET4 included

Slide 12

Slide 12 text

MEET SIMPLECACHE.NET async, permanent, cross-platform key-value object cache

Slide 13

Slide 13 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET IN BRIEF ▸runs on .NET45+ ▸runs on iOS, Android, WinPhone (Xamarin) ▸runs on .NET4 ▸single codebase ▸open source ▸part of Amica.vNext toolset: auth, REST client, service discovery, storage,

Slide 14

Slide 14 text

PORTABLE CLASSES OR SHARED PROJECTS? this is the question

Slide 15

Slide 15 text

THE PCL, IT IS THE WAY, THE TRUTH, AND THE LIGHT. FRIENDS DON’T LET FRIENDS USE SHARED PROJECTS. Jason Smith Jan 19, 2016 PCL OR SHARED PROJECT

Slide 16

Slide 16 text

FOR ME, THE PCL IS JUST TOO CUMBERSOME FOR MOST USES. IT IS LIKE USING A CANNON TO KILL A FLY Miguel de Icaza Jan 22, 2016 PCL OR SHARED PROJECT

Slide 17

Slide 17 text

THEY CAN BE USED TOGETHER ACTUALLY

Slide 18

Slide 18 text

PCL CAN REFERENCE SHARED PROJECTS just fine

Slide 19

Slide 19 text

NATIVE PROJECTS CAN ALSO REFERENCE SHARED PROJECTS

Slide 20

Slide 20 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT

Slide 21

Slide 21 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT 99,99% IMPLEMENTATION

Slide 22

Slide 22 text

SHARED PROJECT CORE

Slide 23

Slide 23 text

SHARED PROJECT CORE ONE ABASTRACT METHOD

Slide 24

Slide 24 text

SHARED PROJECT CORE IMPLEMENTATION

Slide 25

Slide 25 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT FULL .NET4 PROJECT

Slide 26

Slide 26 text

NET4 PLATFORM

Slide 27

Slide 27 text

NET4 PLATFORM INHERIT FROM CORE CLASS

Slide 28

Slide 28 text

NET4 PLATFORM JUST OVERRIDE ONE METHOD

Slide 29

Slide 29 text

NET4 PLATFORM DESKTOP DATABASE PATH

Slide 30

Slide 30 text

NET4 PLATFORM CLASSIC SQLITE CONNECTION

Slide 31

Slide 31 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT

Slide 32

Slide 32 text

NET45 PLATFORM

Slide 33

Slide 33 text

NET45 PLATFORM DEKSTOP DATABASE PATH

Slide 34

Slide 34 text

NET45 PLATFORM PLATFORM CONNECTION SQLITE-PCL

Slide 35

Slide 35 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT

Slide 36

Slide 36 text

IOS PLATFORM

Slide 37

Slide 37 text

IOS PLATFORM IOS DATABASE PATH

Slide 38

Slide 38 text

IOS PLATFORM PLATFORM CONNECTION SQLITE-PCL

Slide 39

Slide 39 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT NO REDUCED FEATURES SET INDUCTED BY NET4

Slide 40

Slide 40 text

WAIT. THE PORTABLE CLASS, ISN’T THAT REDUNDANT? Yourself & the guy sitting next to you NOW YOU MIGHT BE WONDERING

Slide 41

Slide 41 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE WHY ADD A PCL LAYER TO THE MODERN PLATFORM TOOLSET? ▸SimpleCache is going to be used by a lot of projects: ▸XamarinForms app ▸Discovery Service ▸Authentication ▸REST client ▸Local Storage ▸PCL resolves all SimpleCache references VS adding each and every one to all parent projects ▸Shared Project in each parent project leads to multiple definition warnings in the solution… ▸… which, in turn, leads to explicit casts needed in parent projects ▸“Simple is better than complex” — Zen of Python

Slide 42

Slide 42 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT SQLITE.NET.CORE-PCL

Slide 43

Slide 43 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT CLASSIC SQLITE.NET

Slide 44

Slide 44 text

SHARED PROJECT CORE BUILD-TIME COMPILATION SYMBOL

Slide 45

Slide 45 text

REST CLIENT CORE EVE.NET DIGRESSION REFLECTION DISCREPANCIES NET4/NET45

Slide 46

Slide 46 text

CROSS PLATFORM KEY-VALUE OBJECT CACHE SIMPLECACHE.NET CORE PORTABLE CLASS .NET45+ XAMARIN.FORMS IOS ANDROID WINPHONE PLATFORMS MODERN DESKTOP LEGACY DESKTOP NET4 APPS SHARED PROJECT INVERSION OF CONTROL

Slide 47

Slide 47 text

IOS PLATFORM XAMARIN DEPENDENCY SERVICE

Slide 48

Slide 48 text

XAMARIN FORMS PORTABLE CLASS RETRIEVE PLATFORM IMPLEMENTATION

Slide 49

Slide 49 text

XAMARIN FORMS PORTABLE CLASS USE IT IN THE MOBILE, SHARED CODEBASE

Slide 50

Slide 50 text

REAL LIFE .NET CROSS PLATFORM OUR WAY OUT OF TROUBLE ▸ Shared Projects referenced in both Portable Classes and native .NET libraries. ▸ Use Shared Project directly un legacy .NET projects ▸ Use PCL wrapper in modern .NET and mobile projects ▸ Abstract methods work for us, eventually combined with other IoC techniques like Dependency Service, Bait and Switch, etc. ▸ #ifdef in Shared Project will be honored in Portable Classes (just define the constant in PCL build settings). Use sparingly. ▸ If you don’t need to support legacy frameworks life is easy ▸ This stuff is costantly evolving (.NET Core, Platform Standard, etc.) so stay up to date.

Slide 51

Slide 51 text

THANKS! Nicola Iarocci @nicolaiarocci / nicolaiarocci.com / me@nicolaiarocci.com SimpleCache http://buff.ly/1WSqUru