10. • Portable Class Library -
Один общий проект с
бизнес-логикой –
используется на всех
платформах!
• Раньше: по проекту на
платформу (общие
файлы линкуются) –
проблемы с
рефакторингом
12. Множество существующих
наработок
• За последний год количество
кросплатформенных библиотек выросло в
разы.
– JSON.Net
– Autofac/Ninject.Portable/etc
– MetroLog
– Stampsy.Social (авторизация через соц. сети)
– WebSockets (SignalR, xSockets)
– Геопозиционирование (встроенные средства
MVVMCross)
– etc.
13. Архитектурные подходы
• Кроссплатформенная разработка – это
ваш шанс грамотно и уместно применить
многие известные шаблоны
проектирования
– Inversion Of Control, DI-контейнеры (сходные
API на разных платформах реализованы по
разному
– MVVM – повторное использование
ViewModel для разных View
– Асинхронные взаимодействия и
параллелизация вычислений – Нет
блокировкам UI потока.
20. Memory leak
• Android – работа с изображениями
C# ImageView
32 bytes
Native Drawable
3Mb
21. Производительность Garbage
Collector
• Мнение: языки со сборкой мусора априори
в 30 раз медленнее «нативных» (о
динамических языках: JavaScript, Ruby, etc.)
http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
22. 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];
}
}
Мы в свое время выбралиc# для кроссплатформенной разработки, и с каждым годом мы все более уверены в том, что это отличный выбор.Почему? Потому что c# работает везде.С помощью c# можно писать не только под windows, как вы все уже привыкли, но и под устройства с всего 64К памяти.
Консольные приложения, веб-серверы, мак
Вынужден был дублировать код на уровне проекта
Описывать плюсы кроссплатформенной разработки на c# можно очень долго: это и привычный язык, и использование существующих знаний, и поддержка лямбд и async/await.С точки зрения пользователя, если приложение замерло хотя бы на секунду, то оно тормозит. Интерфейс не должен «подвисать» – это аксиома мобильной разработки