قسمت 4 - برخورد با چندین سیستم عامل

ساخت وبلاگ

واگرایی فقط یک مشکل "پلتفرم" نیست. دستگاه های موجود در پلت فرم "یکسان" دارای قابلیت های مختلفی هستند (به ویژه طیف گسترده ای از دستگاه های اندرویدی که در دسترس هستند). واضح ترین و اساسی ترین اندازه صفحه نمایش است ، اما سایر ویژگی های دستگاه می توانند متفاوت باشند و برای بررسی برخی از قابلیت های خاص و بر اساس حضور آنها (یا عدم حضور) نیاز به یک برنامه دارند.

این بدان معناست که همه برنامه ها باید با تخریب عملکردی عملکردی مقابله کنند ، یا در غیر این صورت مجموعه ای از ویژگی های غیر جذاب ، کمترین و متداول را ارائه می دهند. ادغام عمیق Xamarin با SDK های بومی هر سیستم عامل به برنامه ها اجازه می دهد تا از عملکرد خاص پلتفرم استفاده کنند ، بنابراین طراحی برنامه ها برای استفاده از این ویژگی ها منطقی است.

برای بررسی کلی در مورد تفاوت سیستم عامل ها در عملکرد ، مستندات قابلیت های پلتفرم را مشاهده کنید.

نمونه هایی از واگرایی سکو

عناصر اساسی که در سراسر سیستم عامل وجود دارند

برخی از ویژگی های برنامه های تلفن همراه وجود دارد که جهانی هستند. اینها مفاهیم سطح بالاتر هستند که به طور کلی در مورد همه دستگاه ها صادق هستند و بنابراین می توانند اساس طراحی برنامه شما را تشکیل دهند:

  • انتخاب ویژگی از طریق زبانه ها یا منوها
  • لیست داده ها و پیمایش
  • نمایش های واحد از داده ها
  • ویرایش دیدگاههای واحد از داده ها
  • پیمایش به عقب

هنگام طراحی جریان صفحه نمایش سطح بالا می توانید یک تجربه کاربر مشترک را بر روی این مفاهیم پایه گذاری کنید.

ویژگی های خاص سیستم عامل

علاوه بر عناصر اساسی موجود در همه سیستم عامل ها ، شما باید به تفاوت های کلیدی پلتفرم در طراحی خود بپردازید. ممکن است لازم باشد این تفاوت ها را در نظر بگیرید (و کد را به طور خاص بنویسید):

  • اندازه صفحه - برخی از سیستم عامل ها (مانند iOS و نسخه های قبلی Windows Phone) دارای اندازه صفحه نمایش استاندارد هستند که برای هدف قرار دادن نسبتاً ساده هستند. دستگاه های Android دارای تنوع زیادی از ابعاد صفحه نمایش هستند که برای پشتیبانی بیشتر در برنامه شما نیاز به تلاش بیشتری دارند.
  • استعاره های ناوبری - در سراسر سیستم عامل ها (به عنوان مثال سخت افزار ‘دکمه برگشت ، کنترل UI پانوراما) و در سیستم عامل ها (Android 2 و 4 ، iPhone vs iPad) متفاوت است.
  • صفحه کلید - برخی از دستگاه های اندرویدی دارای صفحه کلید فیزیکی هستند و برخی دیگر فقط دارای صفحه کلید نرم افزاری هستند. کدی که تشخیص می دهد وقتی یک صفحه کلید نرم بخشی از صفحه نمایش را مبهم می کند ، باید نسبت به این اختلافات حساس باشد.
  • لمس و حرکات - پشتیبانی از سیستم عامل برای تشخیص ژست ، به ویژه در نسخه های قدیمی هر سیستم عامل متفاوت است. نسخه های اولیه اندروید پشتیبانی بسیار محدودی برای عملیات لمسی دارد ، به این معنی که پشتیبانی از دستگاه های قدیمی ممکن است به کد جداگانه نیاز داشته باشد
  • اعلان های فشار - در هر سیستم عامل قابلیت ها/پیاده سازی های مختلفی وجود دارد (به عنوان مثال کاشی های زنده در ویندوز).

ویژگی های خاص دستگاه

تعیین کنید حداقل ویژگی های مورد نیاز برای برنامه باید باشد. یا وقتی تصمیم بگیرید که از چه ویژگی های اضافی برای استفاده در هر سیستم عامل استفاده می شود. برای تشخیص ویژگی ها و غیرفعال کردن عملکرد یا ارائه گزینه های دیگر ، کد لازم خواهد بود (به عنوان مثال می توان گزینه ای برای مکان جغرافیایی را به کاربر اجازه داد که یک مکان را تایپ کنید یا از نقشه انتخاب کنید):

  • دوربین- عملکرد در بین دستگاه ها متفاوت است: برخی از دستگاه ها دوربین ندارند ، برخی دیگر دوربین های جلو و عقب دارند. برخی از دوربین ها قادر به ضبط ویدیو هستند.
  • Geo-Location & Maps-پشتیبانی از GPS یا موقعیت Wi-Fi در همه دستگاه ها وجود ندارد. برنامه ها همچنین باید از سطوح مختلف دقت که توسط هر روش پشتیبانی می شود ، تهیه کنند.
  • شتاب سنج ، ژیروسکوپ و قطب نما - این ویژگی ها اغلب فقط در انتخاب دستگاه ها در هر سیستم عامل یافت می شوند ، بنابراین برنامه ها تقریباً همیشه در صورت پشتیبانی از سخت افزار نیاز به ارائه بازپرداخت دارند.
  • توییتر و فیس بوک-فقط "داخلی" به ترتیب در iOS5 و iOS6 ساخته شده است. در نسخه های قبلی و سایر سیستم عامل ها باید توابع تأیید اعتبار و رابط خود را مستقیماً با API هر سرویس ارائه دهید.
  • ارتباطات نزدیک (NFC) - فقط در (برخی) تلفن های اندرویدی (در زمان نوشتن).

برخورد با واگرایی سکو

دو رویکرد مختلف برای پشتیبانی از چندین سیستم عامل از همان پایه کد وجود دارد که هر کدام دارای مزایا و مضرات خاص خود هستند.

  • انتزاع پلتفرم - الگوی نمای تجاری ، یک دسترسی یکپارچه را در سراسر سیستم عامل ها فراهم می کند و اجرای پلت فرم خاص را در یک API واحد و یکپارچه خلاصه می کند.
  • اجرای واگرا - فراخوانی از ویژگی های پلت فرم خاص از طریق پیاده سازی های واگرا از طریق ابزارهای معماری مانند رابط ها و وراثت یا تدوین شرطی.

انتزاع سکو

انتزاع طبقاتی

با استفاده از هر یا رابط یا کلاسهای پایه تعریف شده در کد مشترک و پیاده سازی یا گسترش در پروژه های خاص پلتفرم. نوشتن و گسترش کد مشترک با انتزاع کلاس به ویژه برای کتابخانه های کلاس قابل حمل مناسب است زیرا آنها زیر مجموعه محدودی از چارچوب را در اختیار آنها قرار می دهند و نمی توانند حاوی دستورالعمل های کامپایلر برای پشتیبانی از شاخه های کد خاص سیستم عامل باشند.

رابط

استفاده از رابط ها به شما امکان می دهد کلاسهای خاص پلتفرم را که هنوز هم می توانند در کتابخانه های مشترک خود منتقل شوند ، استفاده کنید تا از کد مشترک استفاده کنید.

رابط در کد مشترک تعریف شده و به عنوان یک پارامتر یا ویژگی به کتابخانه مشترک منتقل می شود.

برنامه های خاص پلتفرم می توانند رابط کاربری را پیاده سازی کرده و هنوز هم از کد مشترک برای "پردازش" آن استفاده کنند.

مزایای

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

معایب

مجبور به ایجاد و انتقال پیاده سازی ها به کد مشترک. اگر رابط در اعماق کد مشترک استفاده شود ، به پایان می رسد که از طریق پارامترهای روش چندگانه منتقل می شود یا در غیر این صورت از طریق زنجیره تماس پایین می آید. اگر کد مشترک از بسیاری از رابط های مختلف استفاده می کند ، همه آنها باید در جایی ایجاد و در کد مشترک تنظیم شوند.

وراثت

کد مشترک می تواند کلاسهای انتزاعی یا مجازی را اجرا کند که می توانند در یک یا چند پروژه خاص پلتفرم گسترش یابد. این شبیه به استفاده از رابط ها است اما با برخی از رفتاری که قبلاً اجرا شده است. دیدگاه های مختلفی در مورد اینکه آیا رابط ها یا وراثت یک انتخاب بهتر طراحی هستند وجود دارد: به ویژه به دلیل اینکه C# فقط به ارث مجزا اجازه می دهد ، می تواند نحوه طراحی API های شما را به جلو نشان دهد. از وراث با احتیاط استفاده کنید.

مزایا و مضرات رابط ها به طور مساوی برای وراثت اعمال می شود ، با این مزیت اضافی که کلاس پایه می تواند حاوی برخی از کد های پیاده سازی باشد (شاید یک اجرای کامل پلت فرم آگنوستیک که می تواند به صورت اختیاری گسترش یابد).

xamarin. forms

به مستندات Xamarin. forms مراجعه کنید.

سایر کتابخانه های متقابل پلتفرم

این کتابخانه ها همچنین عملکردهای متقابل پلتفرم را برای توسعه دهندگان C# ارائه می دهند:

  • -API های متقاطع برای ویژگی های مشترک.-گرافیک 2D Cross-Platform.

تدوین مشروط

موقعیت هایی وجود دارد که کد مشترک شما هنوز هم نیاز به کار متفاوت بر روی هر سیستم عامل دارد ، احتمالاً دسترسی به کلاس ها یا ویژگی هایی که متفاوت رفتار می کنند. تدوین مشروط به بهترین وجه با پروژه های دارایی مشترک کار می کند ، جایی که همان منبع منبع در چندین پروژه که دارای نمادهای مختلف هستند ، ارجاع می شود.

پروژه های Xamarin همیشه __mobile__ را تعریف می کنند که برای هر دو پروژه برنامه های کاربردی iOS و Android صادق است (توجه داشته باشید که دو و بعد از تنظیمات دو برابر در مورد این نمادها).

Xamarin. ios __ios__ را تعریف می کند که می توانید برای تشخیص دستگاه های iOS استفاده کنید.

همچنین نمادهای مخصوص تماشای و تلویزیون وجود دارد:

اندروید

کدی که فقط باید در Xamarin. android جمع آوری شود می تواند از موارد زیر استفاده کند

هر نسخه API همچنین یک دستورالعمل جدید کامپایلر را تعریف می کند ، بنابراین کد مانند این به شما امکان می دهد در صورت هدف قرار دادن API های جدید ، ویژگی هایی را اضافه کنید. هر سطح API شامل تمام نمادهای سطح پایین تر است. این ویژگی برای پشتیبانی از چندین سیستم عامل واقعاً مفید نیست. به طور معمول نماد __android__ کافی خواهد بود.

Xamarin. mac __macos__ را تعریف می کند که می توانید فقط برای کامپایل برای MACOS استفاده کنید:

پلت فرم جهانی ویندوز (UWP)

از Windows_uwp استفاده کنید. هیچ گونه تأکید در اطراف رشته مانند نمادهای پلت فرم Xamarin وجود ندارد.

با استفاده از تدوین مشروط

یک نمونه ساده مطالعه موردی از تدوین مشروط ، تنظیم مکان فایل برای پرونده پایگاه داده SQLite است. این سه سیستم عامل برای مشخص کردن محل فایل نیازهای کمی متفاوت دارند:

  • iOS-اپل ترجیح می دهد داده های غیر کاربر در یک مکان خاص (فهرست کتابخانه) قرار گیرد ، اما هیچ سیستم ثابت برای این فهرست وجود ندارد. برای ساختن مسیر صحیح ، کد خاص پلتفرم مورد نیاز است.
  • Android - مسیر سیستم برگردانده شده توسط محیط. specialfolder. personal یک مکان قابل قبول برای ذخیره فایل پایگاه داده است.
  • ویندوز فون - مکانیسم ذخیره سازی جدا شده اجازه نمی دهد تا یک مسیر کامل مشخص شود ، فقط یک مسیر نسبی و نام پرونده.
  • Windows Windows Platform - از API های Windows. storage استفاده می کند.

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

نتیجه کلاس است که می تواند در همه سیستم عامل ها ساخته و مورد استفاده قرار گیرد و پرونده پایگاه داده SQLite را در یک مکان متفاوت در هر سیستم عامل قرار می دهد.

فارکس حرفه ای...
ما را در سایت فارکس حرفه ای دنبال می کنید

برچسب : نویسنده : مرتضی احباب بازدید : <-PostHit-> تاريخ : يکشنبه 21 اسفند 1401 ساعت: 16:25