כיצד להשתמש ב-Portable Class Library על מנת לפתח למספר פלטפורמות

26 במאי 2013

אין תגובות

vs20120_logo_smallבעידן של devices עולמו של מפתח אפליקציות מורכב: המשתמשים של האפליקציה שלו מחזיקים מכשירים שונים (טלפון, טאבלט, עמדת עבודה) והיו שמחים להשתמש באפליקציה שלו בכל אחד מהם. ולכן האתגר שעומד בפני המפתח הוא כיצד לפתח את האפליקציה כך שתרוץ על מספר רחב של מכשירים וכתוצאה מכך תזכה לבסיס לקוחות רחב ככל האפשר.

אופציה אחת העומדת בפני המפתח היא לבחור בטכנולוגיה שאינה ספציפית לפלטפורמה, דוגמת HTML5. כלים כמו PhoneGap מתבססים עלHTML5 שמתארח בתוך web view. באופציה זו המפתח מוגבל ליכולות של HTML5 ולמידת התאימות של המכשיר לסטנדרט של HTML5.

אופציה שניה היא לפתח אפליקציה ייעודית לכל פלטפורמה ((native application. עלויות ההכשרה, הפיתוח והתחזוקה באופציה זו הן כמובן גבוהות, אך במקרה זה למפתח גישה מקסימלית ל-API שנחשפים ע"י הפלטפורמה ועל כן יש לו יכולת לשימוש מיטבי ביכולות של המכשיר.

הדילמה של המפתח רלוונטית גם כשמפתחים רק בטכנולוגיות מיקרוסופטיות אבל לסביבות שונות – win store, desktop app, windows phone, Silverlight, XBox. אולם מכוון שכל הטכנולוגיות הללו מבוססות על .NET Framework (או גרסא שלו) קל יותר להתמודד אתה.

 

Portable Class Library – להתמודד עם פיתוח מרובה פלטפורמות

ה-Portable Class Library Project (או בקיצור PCL) ב-Visual Studio 2012 בא לעזור לנו להתמודד עם אתגר הפיתוח למספר פלטפורמות ומאפשר למפתח לבנות ספריות קוד (assemblies) שמתאימות למספר פלטפורמות בלי צורך לשכתב את הקוד או אפילו לבנות אותו לכל פלטפורמה בנפרד.

ה-Portable Class Library project ב-Visual Studio 2012 מייצר רשימה חלקית של ספריות מתוך .Net Framework – אלו המשותפות לפלטפורמות היעד אליהן המפתח מכוון. בעת יצירת פרויקט PCL המפתח מתבקש לבחור לאלו פלטפורמות הוא מייעד את ה-assembly שהוא מפתח (ראה צילום מסך) וכתוצאה מבחירה זו נוצר פרופיל של .Net Portable subset המכיל את המכנה המשותף של הפלטפורמות הנבחרות.

image

בקישור הבא ניתן למצוא פירוט של אילו .Net Features נתמכים באיזו פלטפורמה http://msdn.microsoft.com/en-us/library/gg597391.aspx .

 

המפתח להצלחה: Design

תכנון נכון של האפליקציה והפרדה בין יכולות באפליקציה שהן ספציפיות לפלטפורמה לבין יכולות שהן משותפות ובלתי תלויות בפלטפורמה הן המפתח לשימוש נכון ב-portable class library.

עבודה עם interfaces ו-abstract class יחד עם DI Container דוגמת AutoFac (או סתם מימוש של Factory) מאפשר גישה מ-portable library למימושים תלויי פלטפורמה בצורה אחידה ושקופה המקלה מאד על הפיתוח.

בואו נראה דוגמה:

הגישה לקבצים ב-Win Store Application שונה מהאופן שבן נגשים לקבצים ב-Desktop application. נניח שהאפליקציה שלנו צריכה לשמור ולקרא מידע בקובץ טקסט מקומי. לשם כך ניצור ב-portableLib שלנו interface (או abstract class אם תהיה לוגיקה משותפת):

image

בכל אחד מהפרויקטים תלויי הפלטפורמה שלנו נממש באופן שונה את IMyAppFile כתלות ב-API שהפלטפורמה מספקת. לדוגמא, ב-Win Store App נוכל לגשת לקבצים באמצעות המחלקה StorageFile, בעוד שאפליקציית desktop תשתמש במחלקה File לצורך גישה וביצוע פעולות על קבצים.

בשאר הקוד של האפליקציה, כמו גם ב-Portable Class Library שלנו, ניגש לקבצים דרך ה-interface בלי להתייחס באופן ישיר לסוג המימוש שעומד מאחורי ה-interface. ה-DI Container ידאג לייצר את האובייקט המתאים בהתאם לקונפיגורציה של האפליקציה.

 

שימוש ב- Portable Class Library ו- MVVM

Design pattern נוסף שמסייע לנו בעבודה עם PCL הוא MVVM.

MVVM הינו pattern שעיקרו הפרדה בין ה-user interface ללוגיקה של האפליקציה. וכאשר אנו מפתחים אפליקציה המיועדת למספר פלטפורמות, הרי שזה בדיוק מה שאנחנו צריכים – לוגיקה אפליקטיבית זהה בכל הגרסאות של האפליקציה, אבל ממשק משתמש שונה כתלות בשטח הנדל"ן שיש לנו במכשירים השונים. ולכן נבנה את ה-Model וה-ViewModel כ-portable class library, בעוד שה-Views יהיו ספציפיים לפלטפורמה.

image

 

מפתחים אפליקציות Windows Store? בואו לשאול את כל השאלות שרציתם בפורום שלנו בעברית!

 

MayaShenhav_222FD2B1[1]הפוסט נכתב ע"י מאיה שנהב, יועצת בכירה בקבוצת היועצים של מיקרוסופט
(MCS ) העוסקת בייעוץ בתחומי ארכיטקטורה, פיתוח, Azure ו- ALM.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *