.NET Standard Library – адекватний стандарт?

Всякий раз, коли у поточному процесі з'являються відхилення, треба задати наступні питання: «Це сталося тому, що у нас не було стандарту? Це сталося тому, що ми не слідували стандарту? Це сталося тому, що стандарт не був адекватним?»
Масаакі Імаі (автор концепції Кайдзен)

image
Кросплатформеність — одне з основних вимог для програми на ринку. Велика частина сучасних мов програмування кроссплатформенны, однак, майже на всіх мовах розробник стикається з проблемою сумісності його з тією або іншою системою. Доводиться компілювати свій проект під конкретну операційну систему або вести розробку проекту під середовище виконання интерпретируемого мови.

Середовище виконання .NET дозволяє розробляти багатоплатформовий ЗА використовуючи проміжний код (байт-код). .NET виглядає кращим, на мій погляд, рішенням для розробки міжплатформового. Однак, як і у всіх інших, у цього рішення є свої недоліки. Їх покликаний усунути .NET Standard.

Як це було
Розглянемо декілька платформ .NET. По-перше, .NET Framework — доступна тільки під Windows, можна запустити середовище виконання на інших операційних системах. По-друге, Mono/Xamarin — це дійсно багатоплатформовий рішення, що підтримує Mac, IOS, Android. З недоліків — відсутність повної сумісності .NET Framework, внаслідок чого доводиться вирізати шматки коду з проекту при портуванні в Mono/Xamarin. Ще одна платформа, яка з'явилася зовсім недавно .NET Core. Вона дозволяє розробляти і запускати серверне багатоплатформовий З під Windows, Linux, Mac, Docker.

Навіть при великій різноманітності і покриття операційних систем, розроблювальна програма може бути не кроссплатформної, т. к. самі платформи сумісні не повністю. Рішення є — розробляємо ядро повністю сумісний з усіма платформами і дописуємо відсутні частини. А як визначити, що сумісно, а що ні? Залишається тільки витрачати час на вивчення документацій та API цих платформ.

Portable Class Library — предок .Net Standard Library
Portable Class Library (PCL) — інструмент для розробки кроссплатформної бібліотеки. При створенні проекту необхідно вибрати список платформ і приступити до розробки. Спочатку PCL підтримувала тільки Windows і Windows Phone. Незабаром Microsoft придбав Xamarin, що відразу додало підтримку Xamarin у PCL. По мірі розробки .NET Core, також з'явилася підтримка цієї платформи в PCL. Платформ стає все більше — отже PCL, як перетин платформ, стає все менше. Microsoft вирішила запропонувати альтернативне рішення.

Нова платформа .NET Standard Library
Microsoft додає нову платформу .NET Standard Library. Перша думка: «тепер потрібно ще більше читати документації, щоб проект працював і на цій платформі теж». Як виявилося, це не так. .NET Standard Library — формальний набір специфікацій загальних інтерфейсів інших платформ: .NET Core, .NET Framework, Mono/Xamarin та інших. Бібліотеки, що задовольняють специфікаціям .NET Standard, можуть бути використані на різних платформах .NET. Фактично, Standard гарантує можливість використання бібліотек у різних середовищах виконання, він приносить універсальність, якої так не вистачало, в екосистему .NET.

.NET Standard змінює архітектуру додатків, він розташовується шар між загальною інфраструктурою .NET і кінцевими платформами.

image

Виділити багатоплатформовий ядро програми стало набагато простіше. Достатньо, щоб ядро збиралося під Standard. Також, в цьому ядрі можна використовувати будь-які інші бібліотеки .NET Standard. Нова прошарок є куратором для майбутніх платформ. Нові платформи повинні будуть відповідати .NET Standard, а не навпаки, як це було з PCL.

Свій Standard під кожну платформу
.NET Standard Library розрізняються за версіями — кожна версія має повну сумісність з наступною (що не можна сказати про PCL). Зворотної сумісності немає. При виборі більш високої версії буде збільшена кількість API для розробки бібліотеки. Однак, це означає, що менше платформ будуть підтримувати розробляється бібліотеку. Нижче наведена таблиця різних версій .NET Standard (таблиця складена для Release версії .NET Standard).

Target Platform Name Alias
.NET Standard netstandard 1.0 1.1 1.2 1.3 1.4 1.5 1.6
.NET Core netcoreapp 1.0
.NET Framework net 4.5 4.5.2
4.5.1
4.6 4.6.1 4.6.2 4.6.3
Universal Windows Platform uap 10.0
Windows win 8.0 8.1
Windows Phone wpa 8.1
Windows Phone Silverlight wp 8.1
8.0
Mono/Xamarin Platforms *
Mono *
У першій рядку наведено номери версій .NET Standard Library. У кожному наступному рядку вказана платформа і версія, яка може використовувати бібліотеку написану з використанням відповідного Standard. Стрілки вказують на сумісність даної версії Standard з наступною осередком у тому ж рядку.

Приклади:

  1. Якщо бібліотека задовольняє специфікаціям .NET Standard 1.3, то вона може бути використана тільки на платформах: .NET Framework 4.6 (і більш новими), .NET Core, Універсальний Windows Platform 10 (UWP) і Mono/Xamarin.
  2. Якщо бібліотека пишеться під Standard 1.3, то в ній можна використовувати інші бібліотеки, які написані з використанням версій Standard: 1.0, 1.1, 1.2, 1.3.
Розуміння .NET Standard Library
.NET Standard Library можна представити у вигляді абстрактних множин, кожна з міститиме попереднє і додавати щось своє, покриваючи більше коду платформ .NET. Відповідно, їх розмір буде збільшуватися по мірі збільшення номера версії.

image

З кожною новою версією функціонал ядра програми зростатиме, проте, багато можливості «повноцінних» платформ будуть не доступні. Подивимося на зображення інших множин: .NET Framework .NET Core, Mono/Xamarin:

imageimageimage

.NET Standard однієї і тієї ж версії покриває ідентичне безліч коду цих платформ. І перебувати цілком всередині їх перетину. Ядро програми буде знаходитися всередині центрального кола. Сам додаток краще розділити на три частини для реалізації підтримки інших платформ. Таким чином, готовий продукт буде працювати відразу на трьох платформах і на декількох операційних системах.

imageimage

Плюси використання .NET Standard Library:
  • Кросплатформеність, декілька платформ .NET, кілька операційних систем.
  • Підтримка коду — проект буде простіше підтримувати після релізу, додаючи в нього новий функціонал без портування.
  • Гарантія роботи — чергова бібліотека з Nuget під .NET Standard точно буде працювати на декількох операційних системах.
Мінуси використання .NET Standard Library:
  • Обмеження по функціоналу з коробки — .NET Standard продовжує розвиватися.
  • Складнощі з перенесенням під .NET Standard вже існуючих проектів.
Висновок
.NET Standard Library є гарною заміною незручною бібліотеки Portable Class Library. Standard Library набагато краще в плані кроссплатформенности. Тепер можна без великих проблем виділити багатоплатформовий ядро програми або розробити кроссплатформенную бібліотеку, що задовольняють специфікаціям .NET Standard. Потім написати потрібні інтерфейси під необхідні операційні системи і отримати готовий продукт.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.