واگرایی فقط یک مشکل "پلتفرم" نیست. دستگاه های موجود در پلت فرم "یکسان" دارای قابلیت های مختلفی هستند (به ویژه طیف گسترده ای از دستگاه های اندرویدی که در دسترس هستند). واضح ترین و اساسی ترین اندازه صفحه نمایش است ، اما سایر ویژگی های دستگاه می توانند متفاوت باشند و برای بررسی برخی از قابلیت های خاص و بر اساس حضور آنها (یا عدم حضور) نیاز به یک برنامه دارند.
این بدان معناست که همه برنامه ها باید با تخریب عملکردی عملکردی مقابله کنند ، یا در غیر این صورت مجموعه ای از ویژگی های غیر جذاب ، کمترین و متداول را ارائه می دهند. ادغام عمیق Xamarin با SDK های بومی هر سیستم عامل به برنامه ها اجازه می دهد تا از عملکرد خاص پلتفرم استفاده کنند ، بنابراین طراحی برنامه ها برای استفاده از این ویژگی ها منطقی است.
برای بررسی کلی در مورد تفاوت سیستم عامل ها در عملکرد ، مستندات قابلیت های پلتفرم را مشاهده کنید.
برخی از ویژگی های برنامه های تلفن همراه وجود دارد که جهانی هستند. اینها مفاهیم سطح بالاتر هستند که به طور کلی در مورد همه دستگاه ها صادق هستند و بنابراین می توانند اساس طراحی برنامه شما را تشکیل دهند:
هنگام طراحی جریان صفحه نمایش سطح بالا می توانید یک تجربه کاربر مشترک را بر روی این مفاهیم پایه گذاری کنید.
علاوه بر عناصر اساسی موجود در همه سیستم عامل ها ، شما باید به تفاوت های کلیدی پلتفرم در طراحی خود بپردازید. ممکن است لازم باشد این تفاوت ها را در نظر بگیرید (و کد را به طور خاص بنویسید):
تعیین کنید حداقل ویژگی های مورد نیاز برای برنامه باید باشد. یا وقتی تصمیم بگیرید که از چه ویژگی های اضافی برای استفاده در هر سیستم عامل استفاده می شود. برای تشخیص ویژگی ها و غیرفعال کردن عملکرد یا ارائه گزینه های دیگر ، کد لازم خواهد بود (به عنوان مثال می توان گزینه ای برای مکان جغرافیایی را به کاربر اجازه داد که یک مکان را تایپ کنید یا از نقشه انتخاب کنید):
دو رویکرد مختلف برای پشتیبانی از چندین سیستم عامل از همان پایه کد وجود دارد که هر کدام دارای مزایا و مضرات خاص خود هستند.
با استفاده از هر یا رابط یا کلاسهای پایه تعریف شده در کد مشترک و پیاده سازی یا گسترش در پروژه های خاص پلتفرم. نوشتن و گسترش کد مشترک با انتزاع کلاس به ویژه برای کتابخانه های کلاس قابل حمل مناسب است زیرا آنها زیر مجموعه محدودی از چارچوب را در اختیار آنها قرار می دهند و نمی توانند حاوی دستورالعمل های کامپایلر برای پشتیبانی از شاخه های کد خاص سیستم عامل باشند.
استفاده از رابط ها به شما امکان می دهد کلاسهای خاص پلتفرم را که هنوز هم می توانند در کتابخانه های مشترک خود منتقل شوند ، استفاده کنید تا از کد مشترک استفاده کنید.
رابط در کد مشترک تعریف شده و به عنوان یک پارامتر یا ویژگی به کتابخانه مشترک منتقل می شود.
برنامه های خاص پلتفرم می توانند رابط کاربری را پیاده سازی کرده و هنوز هم از کد مشترک برای "پردازش" آن استفاده کنند.
مزایای
این پیاده سازی می تواند حاوی کد خاص پلتفرم و حتی کتابخانه های خارجی خاص برای سیستم عامل باشد.
معایب
مجبور به ایجاد و انتقال پیاده سازی ها به کد مشترک. اگر رابط در اعماق کد مشترک استفاده شود ، به پایان می رسد که از طریق پارامترهای روش چندگانه منتقل می شود یا در غیر این صورت از طریق زنجیره تماس پایین می آید. اگر کد مشترک از بسیاری از رابط های مختلف استفاده می کند ، همه آنها باید در جایی ایجاد و در کد مشترک تنظیم شوند.
کد مشترک می تواند کلاسهای انتزاعی یا مجازی را اجرا کند که می توانند در یک یا چند پروژه خاص پلتفرم گسترش یابد. این شبیه به استفاده از رابط ها است اما با برخی از رفتاری که قبلاً اجرا شده است. دیدگاه های مختلفی در مورد اینکه آیا رابط ها یا وراثت یک انتخاب بهتر طراحی هستند وجود دارد: به ویژه به دلیل اینکه C# فقط به ارث مجزا اجازه می دهد ، می تواند نحوه طراحی API های شما را به جلو نشان دهد. از وراث با احتیاط استفاده کنید.
مزایا و مضرات رابط ها به طور مساوی برای وراثت اعمال می شود ، با این مزیت اضافی که کلاس پایه می تواند حاوی برخی از کد های پیاده سازی باشد (شاید یک اجرای کامل پلت فرم آگنوستیک که می تواند به صورت اختیاری گسترش یابد).
به مستندات Xamarin. forms مراجعه کنید.
این کتابخانه ها همچنین عملکردهای متقابل پلتفرم را برای توسعه دهندگان C# ارائه می دهند:
موقعیت هایی وجود دارد که کد مشترک شما هنوز هم نیاز به کار متفاوت بر روی هر سیستم عامل دارد ، احتمالاً دسترسی به کلاس ها یا ویژگی هایی که متفاوت رفتار می کنند. تدوین مشروط به بهترین وجه با پروژه های دارایی مشترک کار می کند ، جایی که همان منبع منبع در چندین پروژه که دارای نمادهای مختلف هستند ، ارجاع می شود.
پروژه های Xamarin همیشه __mobile__ را تعریف می کنند که برای هر دو پروژه برنامه های کاربردی iOS و Android صادق است (توجه داشته باشید که دو و بعد از تنظیمات دو برابر در مورد این نمادها).
Xamarin. ios __ios__ را تعریف می کند که می توانید برای تشخیص دستگاه های iOS استفاده کنید.
همچنین نمادهای مخصوص تماشای و تلویزیون وجود دارد:
کدی که فقط باید در Xamarin. android جمع آوری شود می تواند از موارد زیر استفاده کند
هر نسخه API همچنین یک دستورالعمل جدید کامپایلر را تعریف می کند ، بنابراین کد مانند این به شما امکان می دهد در صورت هدف قرار دادن API های جدید ، ویژگی هایی را اضافه کنید. هر سطح API شامل تمام نمادهای سطح پایین تر است. این ویژگی برای پشتیبانی از چندین سیستم عامل واقعاً مفید نیست. به طور معمول نماد __android__ کافی خواهد بود.
Xamarin. mac __macos__ را تعریف می کند که می توانید فقط برای کامپایل برای MACOS استفاده کنید:
از Windows_uwp استفاده کنید. هیچ گونه تأکید در اطراف رشته مانند نمادهای پلت فرم Xamarin وجود ندارد.
یک نمونه ساده مطالعه موردی از تدوین مشروط ، تنظیم مکان فایل برای پرونده پایگاه داده SQLite است. این سه سیستم عامل برای مشخص کردن محل فایل نیازهای کمی متفاوت دارند:
کد زیر از تدوین مشروط برای اطمینان از صحت پایگاه داده برای هر سیستم عامل استفاده می کند:
نتیجه کلاس است که می تواند در همه سیستم عامل ها ساخته و مورد استفاده قرار گیرد و پرونده پایگاه داده SQLite را در یک مکان متفاوت در هر سیستم عامل قرار می دهد.
فارکس حرفه ای...
برچسب :
نویسنده : مرتضی احباب
بازدید : <-PostHit->