SlideShare a Scribd company logo
1 of 29
Беды и победы
кроссплатформенной мобильной
разработки на C#
Артур Дробинский,
архитектор DPLabs
http://arturdr.ru
Количество PC/смартфонов в мире
C# везде!
2.5 миллиарда устройств
Write once run anywhere
Нативный UI на каждой платформе
Новые возможности - 2013
• Portable Class Library -
Один общий проект с
бизнес-логикой –
используется на всех
платформах!
• Раньше: по проекту на
платформу (общие
файлы линкуются) –
проблемы с
рефакторингом
Portable Class Libraries
• Раньше: • Сейчас:
Множество существующих
наработок
• За последний год количество
кросплатформенных библиотек выросло в
разы.
– JSON.Net
– Autofac/Ninject.Portable/etc
– MetroLog
– Stampsy.Social (авторизация через соц. сети)
– WebSockets (SignalR, xSockets)
– Геопозиционирование (встроенные средства
MVVMCross)
– etc.
Архитектурные подходы
• Кроссплатформенная разработка – это
ваш шанс грамотно и уместно применить
многие известные шаблоны
проектирования
– Inversion Of Control, DI-контейнеры (сходные
API на разных платформах реализованы по
разному
– MVVM – повторное использование
ViewModel для разных View
– Асинхронные взаимодействия и
параллелизация вычислений – Нет
блокировкам UI потока.
Практические проблемы
реальных приложений
Memory leak
• iOS - Circular References
public class CustomView : UIView
{
UIViewController parent;
public CustomView(UIViewController parent)
{
this.parent = parent;
}
}
public class PuzzleController : UIViewController
{
public override void ViewDidLoad()
{
View.Add(new CustomView(this));
}
}
Memory leak
• iOS - Circular References
public class PuzzleController : UIViewController
{
public override void ViewDidLoad()
{
var button = new CustomButton();
View.Add(button);
button.TouchUpInside += (sender, e) =>
this.RemoveFromParentViewController();
}
}
Memory leak
• iOS – HeapShot to the rescue!
Memory leak
• Android – работа с изображениями
C# ImageView
32 bytes
Native Drawable
3Mb
Производительность Garbage
Collector
• Мнение: языки со сборкой мусора априори
в 30 раз медленнее «нативных» (о
динамических языках: JavaScript, Ruby, etc.)
http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
GC и «тяжелые» деревья объектов
• «Тяжелые» объекты лучше делать
статическими
public class DownloadCache
{
private Dictionary<Uri, string> _commitCache;
string GetUri(Uri uri)
{
return _commitCache[uri];
}
}
public class DownloadCache
{
private static Dictionary<Uri, string> _commitCache;
string GetUri(Uri uri)
{
return _commitCache[uri];
}
}
Приложение за 15 минут!
Приложение за 15 минут!
• MvvmCross
• Ninja Coder for MvvmCross
• UserInteraction plugin for MvvmCross
• SignalR
• Genymotion (Android x86)
Спасибо!
Вопросы?
Артур Дробинский,
http://arturdr.ru
info@arturdr.ru
Run a C# app, get a C# shirt
http://xamarin.com/sharp-shirt
Workflow разработки
Модульное тестирование
• NUnitLite.Portable
– аналог Nunit
– Runner’ы на всех платформах + UI для iOS.
– Moq на iOS
не работает 
Модульное тестирование
• FluentAssertions.Portable
string actual = "AABCDEFGHI";
actual.Should().StartWith("AB")
.And.EndWith("HI")
.And.Contain("EF")
.And.HaveLength(9);
string actual = "AABCDEFGHI";
Assert.IsTrue(actual.StartsWith("AB"));
Assert.IsTrue(actual.EndsWith("HI"));
Assert.IsTrue(actual.Contains("EF"));
Assert.AreEqual(9, actual.Length);

More Related Content

Similar to DevPro-2014: Кроссплатформенное приложение за 15 минут или Беды и победы мобильной разработки

От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииYandex
 
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервереAndrew Sovtsov
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на DockerМихаил Бакулин
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidAndrew Sovtsov
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbitjskonst
 
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)jam_team
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsNikita Lipsky
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems
 
SECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программироватьSECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программироватьDmitri Soshnikov
 
Microsoft , Azure и Drupal
Microsoft , Azure и DrupalMicrosoft , Azure и Drupal
Microsoft , Azure и DrupalPVasili
 
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложенийОлег Винников
 
Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновЕкатерина Макарова
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)Alexander Bausk
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими рукамиRoman Dvornov
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годAnton Turetsky
 

Similar to DevPro-2014: Кроссплатформенное приложение за 15 минут или Беды и победы мобильной разработки (20)

От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лаборатории
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios android
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
 
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
[JAM 2.1] Cloud Computing (Dmitry Ivashnev)
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java Applications
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
 
SECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программироватьSECR2013: Как научить ваших детей программировать
SECR2013: Как научить ваших детей программировать
 
Microsoft , Azure и Drupal
Microsoft , Azure и DrupalMicrosoft , Azure и Drupal
Microsoft , Azure и Drupal
 
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложений
 
Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леонов
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 

DevPro-2014: Кроссплатформенное приложение за 15 минут или Беды и победы мобильной разработки

Editor's Notes

  1. Мы в свое время выбралиc# для кроссплатформенной разработки, и с каждым годом мы все более уверены в том, что это отличный выбор.Почему? Потому что c# работает везде.С помощью c# можно писать не только под windows, как вы все уже привыкли, но и под устройства с всего 64К памяти.
  2. Консольные приложения, веб-серверы, мак
  3. Вынужден был дублировать код на уровне проекта
  4. Описывать плюсы кроссплатформенной разработки на c# можно очень долго: это и привычный язык, и использование существующих знаний, и поддержка лямбд и async/await.С точки зрения пользователя, если приложение замерло хотя бы на секунду, то оно тормозит. Интерфейс не должен «подвисать» – это аксиома мобильной разработки
  5. Существует мнение, что