MVVM part 5 – the caliburn Micro framework

5 בJanuary 2013

תגובה אחת

MVVM part 5 – the caliburn Micro
framework

אוקיי, הגיע הזמן
לחזור למדריך שלי על
MVVM.

הפעם נכיר את הספרייה
של
Caliburn
Micro
שבתור התחלה נוריד מכאן, codeplex מחזיק את קוד המקור שמתעדכן מדי פעם והגרסה העדכנית שזה 1.4 נכון
להיום גם כוללת תשתית תומכת ל
windows phone.

כל מה שיעניין אותנו
במדריך מקוצר זה ה
DLL
 הספציפי של WPF, אז ניקח אותו מ BIN\WPF\Debug ,על הדרך ניתן רפרנס גם לDLL  השני שנמצא שם שזה system windows interactivity כי נצטרך אותו (זאת לא הדרך היחידה להוסיף
אותו כי הוא נמצא בכל מקרה בספריה של
system windows אבל חבל
לדפדף שוב..)

אוקיי. מה נותן לי Caliburn?? קודם כל ברגע שאנו ניגשים לבנות אפליקציה גדולה נצטרך יותר
תמיכה ממה שיש לספריה קטנה כמו
MVVM-Light להציע. אפליקציה גדולה זה
לדוגמא
Visual
studio
או תכנת אופיס וכו’

חשוב להבין MVVMש  זה אסון לאפליקציה קטנה (מחשבון..)
ונחמד לאפליקציה בינונית (נגן וידאו). באפליקציות גדולות מתגלה הכח האמיתי של התבנית
על ההפרדה המוחלטת שבין חלקיה, אבל דווקא אז שימוש בתשתית מוכנה יהיה נחמד וישאיר
לנו את ההתעסקות בעיקר. שזה לתכנת.. איך מודדים אם זו אפליקציה גדולה?? קחו את
תיקיית הקוד שלכם (כולל
UI, בלי DB ) אם יש לכם מאה מגה אז אתם באפליקציה מהסוג המתאים לקטגוריה.

נתחיל עם מידע טכני
חשוב.
Shell – זה אמר הקליפה של המערכת מבחינת UI  שבתוכה נכנסים כל מיני חלקים שלא
מכירים זה את זה אבל חולקים את המעטפת,

כל חלק כזה מכיל את
מאפייני התצוגה שלו כקוד
xaml + לוגיקה.
ונרשם כדי שהמערכת תציג אותו בתוך ה
Shell.

   BootStrapper   בעולם הMVVM 
 והאפליקציות מבוזרות זאת נקודת הפתיחה שבה
האפליקציה עולה, נהיה חייבים תמיד להגדיר אחת כזאת משלנו כי בעבר היה לנו את אותו
startUpUri = mainWindow. לפחות כברירת מחדל של  WPF app ובכן זה בדיוק bootStrapper.

אוקיי לתכלס ב5 צעדים
פשוטים:

1.      נפתח פרוייקט חדש של WPF ונעיף לפח את Main Window כמו גם נמחק את strartup uri מקובץ הAPP.

 

2.     
נתחיל בViewModel ונקדים דבר חשוב מאוד למי
שנכנס ל
caliburn
Micro
וזה הקונבנציה של השמות.
כל קלאס שתפקידו להיות
viewModel חייב (וזאת לא המלצה)
להסתיים בצירוף
ViewModel מאחר שהספרייה מבוססת על הרעיון של viewModel First בלי להרחיב עכשיו. והתשתית מנהלת עבורנו את
הקשר בין ה
views לviewModels נצטרך לאמץ את הקונבנציה
שבה יש צמידות בין השמות ואז החיבור בין התצוגה ללוגיקה (
datacontext) הוא על אחריות התשתית,

לא שאני
מרגיש נוח עם זה אבל זה “אמור” להקל עלינו. ובכל מקרה זה פיצ’ר נחמד.  אז ניצור קלאס ונגדיר אותו כיורש מ
PropertyChangedBase שזה הטיפול בעדכוני מידע על הview לפי גרסת cliburn. וכבר מוסיף בשביל הבדיקה הראשונית בקונסטרקטור איזשהו MessageBox וזה ייראה כך:

using Caliburn.Micro;

using System.Windows;

 

namespace caliburn_micro_firstDemo

{

   public class HelloWorldViewModelPropertyChangedBase

    {

       public HelloWorldViewModel()

       {

           MessageBox.Show(“hello Caliburn Micro”);

       }

    }

}

 

3.     
נגדיר את ה BootStrapper שכאמור מאפשר לנו להעלות
את האפליקציה ולצאת לדרך.

using Caliburn.Micro;

 

namespace caliburn_micro_firstDemo

{

   public class HelloWorldBootStrapper:Bootstrapper<HelloWorldViewModel>

    {

    }

}

כל מה שעושה
האובייקט זה בעצם לרשום בשבילי מי יעלה ראשון, כמובן שבדוגמא יותר אמיתית פה יהיה
Shell שיחזיק רכיבים פנימיים רבים.

 

4.     
ניצור איזשהו View שיהיה תמיד UserControl (נזכור לתת לו את אותו השם של הViewModel רק נוריד את סיומת הmodel)

 שימו לב שבדוגמא הView שלי נשאר ריק לחלוטין:

<UserControl x:Class=”caliburn_micro_firstDemo.HelloWorldView”

             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

             xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″ 

             xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″ 

             mc:Ignorable=”d” 

             d:DesignHeight=”300″ d:DesignWidth=”300″>

    <Grid>

            

    </Grid>

</UserControl>

 

5.      נשאר רק לציין ב AppXaml מי הוא הbootstrapper שיעלה לי לאוויר את
התכנית וזה אני עושה כך:

<Application x:Class=”caliburn_micro_firstDemo.App”

             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

             xmlns:local=”clr-namespace:caliburn_micro_firstDemo” >

           

    <Application.Resources>

        <ResourceDictionary>

            <ResourceDictionary.MergedDictionaries>

                <ResourceDictionary>

                  <local:HelloWorldBootStrapper x:Key=”bootStrapper”/>

                </ResourceDictionary>

            </ResourceDictionary.MergedDictionaries>

        </ResourceDictionary>

    </Application.Resources>

</Application>

סיימנו.
אם נריץ נקבל את אותה הודעה שהגדרנו ב
viewModel שלנו והתנסינו בכתיבה
בסיסית עם
caliburn
Micro
,

בפוסט
הבא ניקח את זה צעד קדימה ונעשה כמה דברים רציניים יותר.

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

Leave a Reply

Your email address will not be published. Required fields are marked *

תגובה אחת

  1. סיימון7 בJanuary 2013 ב 8:37

    אין ברשת מידע על הספרייה הזו. לכן אנשים מתרחקים ממנה

    Reply