המודל-View-Controller (MVC) דפוס אדריכלי כבר זמן רב אבן הפינה של פיתוח יישומי אינטרנט מובנה. על ידי הפרדת יישום לשלושה רכיבים מקושרים -Model (נתונים ולוגיקה עסקית), View (ממשק המשתמש), ובקר (טיפול בקט) - MVC מקדם קוד מאורגן כי הוא קל יותר לשמור, לבדוק, ולהאריך.

מה זה ViewModel?

(הופנה מהדף השקפה מסוימת) הוא שיעור מותאם אישית המיועד במיוחד לענות על הצרכים של הנתונים וההתנהגות של תפיסה מסוימת.הוא יושב בין המודל (התחום או שכבת הגישה לנתונים) לבין התצוגה, והופך נתונים גולמיים לצורה שההשקפה יכולה לצרוך ללא מאמץ, בניגוד למודל התחום, המייצג את הגופים העסקיים והחוקים (לדוגמה, LT:0 אובייקט עם LT:1,F2, 3) ו-(F) המכילהחומר של אינטגרטיבי (לדוגמה,5 ⁇ )

(הופנה מהדף פרופיל משתמש טיפוסי (מודל התחום) עשוי להיות נפרד FLT:8 ו-FLT:9 ישויות. AFLT:10 יכול לשלב את שם התצוגה של המשתמש, העיר, והמדינה לתוך מחרוזת אחת של FLT:11 ולהציג את התאריך ההצטרפות בפורמט אנושי-readable.ללא תצוגהModel, הנוף צריך להבין את המבנה של שני המרכיבים והעיצוב של גופים ברורים של הפרדה בין-לכאורה.

ViewModel vs. Domain Model vs. DTO

חשוב להבחין בין תצוגהModel מתבניות דומות אחרות.אובייקט העברת נתונים (DTO) משמש לעתים קרובות להעביר נתונים בין שכבות (למשל, משירות לבקר) ובדרך כלל חסר התנהגות. A ViewModel, מצד שני, הוא ספציפי ראייה וניתן לכלול לוגיקה מצגת, תכונות אימות וניהול המדינה (למשל, הוא המשתמש בעריכה, בניגוד לתבניות האבטחה שלך, לא יכול להוביל את המודל העסקי שלך לתבניות האבטחה שלך, ולאיך, האם אתה יכול להוביל את התבניות אבטחה ישירות לתבניות אבטחה ולהוביל את המודל העסקי שלך, או לתבניות אבטחה, או לתבניות אבטחה, או לתבניות אבטחה, או לתבניות אבטחה, או לתבניות אבטחה, אם אתה יכול להוביל אותך באופן ישיר, אם אתה יכול להציג את המודל העסקיות, או לתבניות אבטחה, או לתבניות אבטחה, אם אתה יכול להציג את התכונות שלך, או לתבניות אבטחה, אם אתה יכול להציג את התכונות שלך, אם אתה יכול להוביל באופן ישיר, אם אתה יכול להציג את התכונות העסקיות, באופן ישיר, באופן ישיר, או לא יכול להציג את התכונות שלך, באופן ישיר, אם אתה יכול להציג את התכונות שלך, אם אתה יכול להציג את התכונות שלך, אם אתה יכול להציג את התכונות העסקי שלך, באופן ישיר, אם אתה יכול להציג את התכונות שלך, אם אתה יכול להציג את התכונות

כיצד להציגModels Siלהגדיל את הנתונים Binding

Data Reference הוא המנגנון המחבר אלמנטים UI למקורות נתונים, באופן אוטומטי סינכרון ערכים.במסגרת של MVC בשרתים כמו ASP.NET MVC, Spring MVC, או Laravel, Data המחייבת מתרחשת בדרך כלל במהלך הגשת טפסים: המסגרת קוראת פרמטרים בקשה HTTP ומפות אותם לאובייקט מודל. כאשר אובייקט זה הוא ViewModel, המיפוי הופך פשוט ומאובטח.

באמצעות תצוגהModel עבור נתונים המחייבים מספר יתרונות:

  • (הופנה מהדף מיפוי של שדות צורה: 1) ניתן להגדיר בדיוק אילו שדות הנוף צופה, הימנעות מהתקפות מעל פני השטח שבו משתמש זדוני מזרק שדות נוספים (למשל, הגדרתם של:12 על טופס רישום).
  • (ב) ,0) , נספחים (ב"ה) , ראה מנדלים מאפשר לך להציב חוקי אימות (כגון FLT:13, FLT:14, או תקפים מותאמים אישית) ישירות על המאפיינים שהתצוגה הופכת.
  • (FLT:0) ,העברת שגיאות מחייבות: FLT:1hil כי ViewModel המפות אחת לאחד עם טופס UI, מפתחים נמנעים מנחשת של התאמת פרמטרים לבקשה לגרפים מורכבים.

דוגמה: טופס רישום משתמשים

(ב) ללא השקפה מנבאת, ייתכן שמפקח יחייב בקשה לרישום מודל דומיין של ממלכה (FLT:15 ; ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

במסגרת הלקוח-צדית המשתמשת בחייב שני נתיבים (למשל, Angular או Vue.js), ViewModels משרת תפקיד דומה על ידי הגדרת צורת הנתונים המרכיבים יציגו ומשתנים.The ViewModel יכול לכלול תכונות מקופלות, שינוי מעקב, ומטפלים באירוע, כל אלה הם מלוכדים ועמידים במבחן.

תפקיד של ViewModels ב-Proview Logic

לוגיקה מצגת כוללת את כל מה שההשקפה צריכה לעשות עם הנתונים: תאריכים מפורמטים, המרת מטבע, שמות מאגדים, חישוב סך הכלים, להחליט אילו קטעים כדי להציג בהתבסס על הרשאות משתמש, וניהול מדינת UI (למשל, "Loading" לעומת "Error"), ללא ViewModels, לוגיקה זו מסתיימת לעתים קרובות בתצוגה (באמצעות פונקציות עזרה או שימוש בתבנית מרכזית זו).

לדוגמה, תצוגת פרטים על סדר עשויה להיות צריכה להציג:

  • תאריך הזמנה בפורמט ידידותי (" 15 במרץ, 2025")
  • שם מלא ללקוח (בשיתוף ראשון ואחרונה)
  • כל פריט קו עם תת-לטרה (מחיר × יחידה)
  • הזמנה כוללת מס ומשלוח
  • בין אם ההזמנה זכאית לביטול (מבוסס על מצב וזמן מחלף)

כל הטרנספורמציות הללו שייכות ל- ViewModel, לתצוגה זו פשוט יש תכונות כמו [FLT]:22, , FLT:24 (כל אחד מהם 25FLT:25 עם AFLT:26), ו- (FLT:27 הבקר יוצר את התצוגהModel על ידי החזרת מודל התחום משכבה השירות, מיפוי אותו, עובר אותו, ולהוביל אותו להשקפה.

מידע על מקורות מרובים

צורך נפוץ נוסף מציג נתונים ממודלים מרובים של דומיין בעמוד אחד.לוח נתונים יכול לשלב נתונים פרופיל משתמשים, הזמנות אחרונות, הודעות. A ViewModel יכול להחזיק את כל החלקים האלה באובייקט אחד, מה שהופך את זה קל עבור הנוף כדי להפוך דף משותף.הבקר קורא שירותים נפרדים ומאגד את התצוגהModel, אשר שומר את הנוף מצריך כדי להבין מקורות נתונים מרובים.

היתרונות של ViewModels

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

הפרדה מוגברת של דאגות

ViewModels לאכוף גבול נקי בין שכבת התחום (כללי עסקים) לבין שכבת המצגת.שינויים ב- UI (כמו הוספת שדה חדש לצורה) דורשים שינויים רק ב- ViewModel ותצוגה, לא במודל התחום. הפוך, שינויים במודל התחום (כמו נכס חדש על ישות) אינם קרועים להשקפה אלא אם כן אתה מעדכן את התצוגהModel זה מקטין את הסיכון לתוקפנות.

שיפור ההסתברות של UI Logic

לוגיקה בנוף היא קשה לשמצה במבחן יחידה.עם ViewModels, אתה יכול לבדוק פורמט, הדבקה וניהול המדינה בבידוד ממסגרת UI. אתה יכול לכתוב בדיקות יחידה שמאמתות את ה-FLT:28 או ; FLT:29 ללא טעינה דפדפן או הפעלת HTML.זה מוביל משוב מהיר יותר וקוד אמין יותר.

קוד שכפול

כאשר אותו נתונים יש להציג בהשקפות מרובות (למשל, כרטיס מוצר ברשימה ובעמוד פרטי), באפשרותך ליצור שיעור תצוגה משותף שלModel כי שניהם רואים שימוש בלוגיקה מצגת חי במקום אחד במקום אחד במקום להיות מועתק לכל תצוגה.

מידע טוב יותר של מצגת-Specific Data

ViewModels לאחסן את מצב UI כגון "מצב מדיטציה", "הצגת שגיאות", או "מספר עמודים" זה שומר על הנוף ללא תנאי ואת הבקר התמקד בניווט.עם מסגרות תמיכה במודל מחייב, אתה יכול גם לקבוע את מצב התצוגהModel על פני בקשות, המאפשר אינטראקציות עשירות כמו קוסמים מרוב שלבים.

מלכודות נפוצות ועיסוקים טובים

גם עם היתרונות שלה, דפוס ViewModel יכול להיות מוטעה.כאן שגיאות נפוצות וכיצד להימנע מהם.

צפייה ב- ViewModels for Every View

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

תצוגה מגנטיתModels

תצוגהModel היא לא רק תיק של נכסים ציבוריים ללא התנהגות יכול להוביל לדלפת לוגיקה במקום אחר.כולל שיטות עזר או תכונות מקובעות כי מבססות לוגיקה מצגת (למשל, FLT:30) זה שומר לוגיקה בתצוגהModel שבו היא שייכת.

האמנה

(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

צילום: דומיינים ו- ViewModel

מיפוי ידני (התחילה על ידי רכוש) הוא edious ו-שגיאה-prone. השתמש בכלי כמו AutoMapper עבור .NET, MapStruct עבור Java, או פונקציות עוזר ב-PHP כדי לשייך את המיפוי.עם זאת, להיזהר לא למפות עיוורות - לפעמים מבנה ViewModel שונה באופן משמעותי מהתחום, ומיפוי ידני מציע בהירות אוטומטית.

המונחים: viewModels overs Frameworks

העקרונות הם אוניברסליים, אבל יישום שונה במקצת.בואו נבחן שלוש מסגרות MVC פופולריות.

ASP.NET MVC / Core

ב ASP.NET MVC, ViewModels הם כיתות C# מוגדרות בתיקיה FLT:36.מפקחים לקבל אותם באמצעות ניתוח פרמטרים באמצעות ניתוח שיטות באמצעות FLT:37 או תצוגת מודלים מחייב. תצוגת רזאור הם מאוד קלודות תצוגה (FLT:38) המסגרת תומכת תכונות אימות ישירות על תכונות ViewModel. View משמשים גם עבור תצוגה נתונים; לדוגמה: LT (F(13: מחזירה: 16:39).

public class UserProfileViewModel
{
 public int Id { get; set; }
 [Display(Name = "Full Name")]
 public string FullName { get; set; }
 public string Email { get; set; }
 [DataType(DataType.Date)]
 public DateTime JoinedDate { get; set; }
}

למד עוד על ViewModels in ASP.NET Core מ-FLT:0) תיעוד רשמי של Microsoft, ההרחבה של Microsoft.

Spring MVC (Java)

באביב MVC, ViewModels נקראים לעתים קרובות "לחזור אובייקטים" או "אובייקטים ממוקדים" הם ג'אווה POJOs עם סטיות אימות (כמו FLT:41, FLT:42), בקר משתמש ב-FLT:43 כדי לקשור נתונים לתצוגהModel.

Laravel (PHP)

[ה]לא נבנה שיעורים של ViewModel, אלא מעודד את התבנית באמצעות בקשות טפסים (התחילה) ואת שיעורי משאבים (תשובותAPI) עבור תצוגת שרתים, באפשרותך ליצור שיעורים מותאמים אישית או פשוט להעביר מערך.עם זאת, באמצעות כיתות תצוגה ייעודיות (למשל, FLT:46) משפר את בטיחות סוג ואת יכולת הבדיקה של לארה"ב LT5s יכול לקבל גישה , לדוגמה:

תצוגתModel Patterns

ככל שהיישומים גדלים, ייתכן שתצטרכו מבנים מתוחכמת יותר של ViewModel.

מבט חטוףModels

כאשר תצוגה מכילה רשימה של פריטים, יצירת הורה ViewModel מחזיק אוסף של ילדים ViewModels. לדוגמה, FLT:48 עשוי להכיל FLT:49 ו-FLT:50 כל ילד רואהModel יש לוגיקה מצגת משלו.

ViewModel Inheritance and Structure

אם מספר צפיות חולקות תכונות משותפות (למשל, סעיף "עמוד עמוד" עם פרטי משתמש ופריטים תפריט), באפשרותך ליצור מחלקה בסיסית ViewModel ולהרחיב אותו. Alternatively, להשתמש בהרכב: לכלול AFLT:51 כנכס.קומפוזיציה היא לעתים קרובות גמישה יותר ולהימנע היררכיות עמוקות.

ViewModels with Asynchronous

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

מסקנה

ViewModels הם כלי רב עוצמה אך לעתים קרובות underutilized בפיתוח MVC. על ידי לשמש כמתווך מותאם בין מודלים והשקפות, הם מפשטים את לוגיקה מצגת, מרכזיזציה, לאכוף הפרדה נקייה של דאגות.הם להגן על מודלים דומיין של שינויים ספציפיים UI, שיפור יכולת הבדיקה, צמצום השכפול, ולהפוך את הבסיס לתחזוקה יותר יעילה כמו היישום מתפתח.

(הופנה מהדף ViewModels, זכור לשמור אותם גמישים אך ורק, תכונות אימות מינוף, ולהשתמש בכלים מיפוי באופן עסיסי, להימנע ממלכודת ביצוע כל השקפה תלויה בתצוגהModel - השתמש בהם במקום שבו הם מוסיפים ערך.המשמעת של עיצוב ViewModels תחדד את ההבנה של הצרכים האמיתיים של UI שלך ולהוביל ליישומים MVC חזקים יותר, ראה את FLTRIRST של , 1FULR.