تنظیمات Shared Option در Xamarin

تو این پست میخوام در مورد تنظیمات share option در xamarin بنویسم، در هنگام شروع به ساخت یه پروژه جدید cross platform در visual studio در اولین صفحه ای که باز میشه در مورد Code Share Strategy دو حق انتخاب وجود داره:

تو این پست میخوایم در مورد تفاوت های متود های اشتراک گذاری کد : Shared Projects، Portable Class Libraries و .Net Standard شامل معایب و مزایای شان حرف بزنم،

مقدمه:

همونطور که گفتم سه تا روش مختلف برای اشتراک گذاری کد بین اپلیکیشن های cross-platform وجود داره:

  • Shared Projects : از نوع Shared Asset Project برای سازماندهی سورس کدمون استفاده میشه، و مورد استفادش زمانی هست که دستورات کامپایلر برای مدیریت نیازمندی های خاص مربوط به هر پلتفرم به این نیاز داشته باشند.
  • Portable Class Libraries: ساخت PCL برای پلتفرم هایی که میخوایم ازش پشتیبانی کنیم و همچنین استفاده از واسط برای کاربردهای مربوط به هر پلتفرم خاص.
  • .Net Standard Libraries : همانند روش PCL و برای توابع و کاربرد های مربوط به هر پلتفرم خاص باید از واسط استفاده کرد.

هدف از استراتژی Code-Sharing پشتیبانی از معماری هست که در شکل زیر نمایش داده شده است، که یک پایگاه کد می تونه برای چند پلتفرم استفاده بشه:

تو این پست به بررسی این سه تا روش می پردازیم:

Shared Projects: راحت ترین راه برای اشتراک گذاری کد این روش هست، اسکرین شات زیر فایل solution پروژه شامل سه پروژه اپلیکیشن (Android,iOS, Windows Phone)  با روش shared project که شامل فایل های مشترک سورس کد C# هست رو نشون میده:

معماری مفهومی در شکل زیر نشان داده شده است که هر پروژه شامل تمامی سورس فایل های اشتراک گذاری شده هست:

مثال: اپلیکیشن کراس پلتفرم که از iOS، Android و Windows Phone پشتیبانی می کند، نیازمند پروژه اپلیکیشنی برای هر پلتفرم میباشد.کد های مشترک رد share code زندگی می کنند.

یک solutionبرای مثال شامل پروژه ها و فولدر های زیر خواهدبود (نام های پروژه برای روشن بودن هرچه بیشتر انتخاب شده اند، پروژه های شما نیازی نیست از این نامگذاری ها پیروی کنند ).

  • Shared : پروژه اشتراکی شامل کد های مشترک تمامی پروژه ها.
  • AppAndroid : پروژه Android
  • AppiOS : پروژه ios
  • AppWonPhone : پروژه Windows Phone

تو این روش سه تا پروژه اپلیکیشن سورس کد مشترکشان را به اشتراک می گذارند(فایل های C# به اشتراک گذاشته می شوند.) هر تغییری روی کد اشتراک گذاشته شده د ربین هر سه پروژه به اشتراک گذاشته می شود.

مزایا:

  • اجازه میده کد را بین چندین پروژه به اشتراک بگذاریم.
  • کد های به اشتراک گذاشته شده را می توان بر مبنای پلتفرم با استفاده از دستورات کامپایلر (مانند : #if ___ANDROID__) branch کرد
  • پروژه های اپلیکیشن می توانند شامل مراجع و منابع محتص به هر پلتفرم باشند که کد اشتراکی می تواند از آنها استفاده کند.(مانند استفاده از CsharpSqlite.WP7 در Tasky Sample برای Windows Phone)

معایب :

  • برحلاف دیگر انواع پروژه، پروژه اشتراکی (Shared Prtoject) خروجی assemble ندارد. در طی کامپایل شدن، فایل ها مانند بخشی از منابع پروژه رفتار میکنند و درون assembly آن کاپایل می شوند. اگر قصد دارید کدتون رو به عنوان Assembly به اشتراک بگذارید بهتره از PCL استفاده کنید.
  • Refactor کردن هایی که تاثیر روی کد های داخل ‘inactive’ دستورات کامایلر دارند، کد را بروز نمی کنند.

نکته: راه حل خوبی برای توسعه دهنده های اپلیکیشنی هست که کد نویسی می کنند تا تنها در اپلیکیشن خودشون استفاده کنند و نه در اپلیکیشن دیگر توسعه دهنده ها.

برای مطالعه بیشتر : بیشتر بخوانید

 

Portable Class Libraries (PCL) :

 

مزایا:

  • به شما این اجازه رو میده که کد را بین چندین پروژه به اشتراک بگذارید
  • Refactor کردن عملیات ها همواره تمامی منابع تحت تاثیر رو بروز میکنه.

معایب:

  • از دستورات کامپایلر نمیشه استفاده کرد.
  • تنهای زیر مجموعه ای از .Net Framework برای استفاده در دسترس هست، بر مبنای Profile انتخاب شده تعیین میشه.

نکته: راه حل مناسبی برای مواقعی است که برنامه دارید assembly نتایج را با دیگر توسعه دهنده ها به اشتراک بگذارید.

 

.Net Standard Libraies :

مزایا:

  • به شما این اجازه رو میده که کد رو بین چندین پروژه به اشتراک بگذارید.
  • Refactor کردن عملیات ها همواره تمامی منابع تحت تاثیر رو بروز میکنه.
  • یک ناحیه مسطح از .Net Base Class Library علاوه بر PCL ارائه میده

معایب :

  • از دستورات کامپایلر پشتیبانی نمیکند.

نکته: شبیه به PCL است، اما با مدلی ساده تر برای پشتیبانی پلتفرم و تعداد کلاس های بیشتری از طرف  BCL  دارد.

 

 

پ.ن: مرجع سایت Xamarin