חומר זה הוא חלק מסדרת "מבוא לפיתוח ארגוני". מאמרים קודמים:
במאמר זה נכיר משהו שנקרא MVC. נדבר על מה זה MVC, ניגע בהיסטוריה שלו, נחקור את הרעיונות והמושגים הבסיסיים הגלומים ב-MVC, נסתכל צעד אחר צעד כיצד לפצל יישום למודול מודל, תצוגה ובקר, נכתוב יישום אינטרנט קטן המשתמש ב-Spring Boot, ובאמצעות Spring MVC כדוגמה, ראה כיצד נתונים נשלחים מקוד Java לדפי HTML. כדי להבין את החומר הזה, אתה צריך להכיר דפוסי עיצוב, במיוחד צופה וחזית. ולהכיר בקשות ותגובות HTTP, להבין את היסודות של HTML ולדעת מהן הערות Java. קח כוס קפה וחטיף, ותרגיש בנוח. בואו נתחיל.
מכל זה נוכל להסיק מסקנה הגיונית. יש לחלק מערכת מורכבת למודולים. נתאר בקצרה את השלבים להשגת הפרדה זו.
וכך מגיעים לאפליקציה המורכבת משלושה מודולים הנקראים המודל, התצוגה והבקר. בואו נסכם:
- על נטוורקינג
- על ארכיטקטורת תוכנה
- לגבי HTTP/HTTPS
- על היסודות של Maven
- על servlets (כתיבת יישום אינטרנט פשוט)
- לגבי מיכלי servlet

היסטוריה של MVC
הרעיונות מאחורי MVC גובשו על ידי Trygve Reenskaug בזמן שעבד ב-Xerox PARC בסוף שנות ה-70. באותם ימים, העבודה עם מחשבים דרשה תואר ולימוד מתמיד של תיעוד רב היקף. המשימה שפתרה Reenskaug יחד עם קבוצה של מפתחים חזקים מאוד הייתה לפשט את האינטראקציה של משתמש רגיל עם המחשב. היה צורך ליצור כלים שמצד אחד יהיו פשוטים ומובנים ביותר ומצד שני יאפשרו לשלוט במחשבים ובאפליקציות מורכבות. Reenskaug עבד בצוות שפיתח מחשב נייד "לילדי כל הגילאים" - ה-Dynabook, כמו גם שפת SmallTalk בהנהגתו של אלן קיי. אז נקבעו המושגים של ממשק ידידותי. במובנים רבים, העבודה שנעשתה על ידי רינסקאוג והצוות שלו השפיעה על האבולוציה של תחום ה-IT. הנה עובדה מעניינת שאינה חלה ישירות על MVC, אך ממחישה את המשמעות של ההתפתחויות הללו. אלן קיי אמר , "כשהגעתי לראשונה לאפל, שהיה בשנת 84', ה-Mac כבר יצא וניוזוויק יצר איתי קשר ושאל אותי מה אני חושב על המק. אמרתי, 'ובכן, ה-Mac הוא המחשב האישי הראשון מספיק טוב כדי לקבל ביקורת'. אז, לאחר שהכריז על האייפון ב-2007, הוא הביא אותו אליי והושיט לי אותו. הוא אמר, 'אלן, האם זה מספיק טוב כדי לקבל ביקורת?' ואמרתי, 'סטיב, תעשה אותו בגודל כזה גדול כמו טאבלט ואתה תשלוט בעולם'." לאחר 3 שנים, ב-27 בינואר 2010, הציגה אפל את האייפד באלכסון של 9.7 אינץ'. במילים אחרות, סטיב ג'ובס עקב כמעט בדיוק אחר עצתו של אלן קיי. הפרויקט של ריינסקאוג נמשך 10 שנים. אבל הפרסום הראשון על MVC יצא לאור לאחר 10 שנים נוספות. מרטין פאולר, מחברם של מספר ספרים ומאמרים על ארכיטקטורת תוכנה, מזכיר שהוא למד MVC באמצעות גרסת עבודה של Smalltalk. מכיוון שלא היה מידע על MVC מהמקור המקורי במשך זמן רב, ומכמה סיבות אחרות, הופיעו מספר רב של פרשנויות שונות למושג זה. כתוצאה מכך, רבים מחשיבים את MVC כתבנית עיצובית. פחות נפוץ, MVC נקרא דפוס מורכב או שילוב של מספר דפוסים הפועלים יחד ליצירת יישומים מורכבים. אבל, כפי שהוזכר קודם לכן, MVC הוא למעשה אוסף של רעיונות/עקרונות/גישות ארכיטקטוניות שניתן ליישם בדרכים שונות תוך שימוש בדפוסים שונים... לאחר מכן, נשקול את הרעיונות העיקריים המוטמעים בתפיסת ה-MVC.MVC: רעיונות ועקרונות בסיסיים
- VC הוא אוסף של רעיונות ועקרונות אדריכליים לבניית מערכות מידע מורכבות עם ממשק משתמש
- MVC הוא קיצור המייצג: Model-View-Controller

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

- על פי עקרונות פרדיגמת ה-MVC, יש לחלק מערכת למודולים.
- המודול החשוב והעצמאי ביותר צריך להיות המודל.
- המודל הוא הליבה של המערכת. צריך להיות אפשרי לפתח ולבדוק אותו באופן עצמאי מממשק המשתמש.
- כדי להשיג זאת, בשלב הראשון של החלוקה, עלינו לפצל את המערכת למודל וממשק משתמש.
- לאחר מכן, באמצעות דפוס הצופה, אנו מחזקים את עצמאות המודל ומסנכרנים ממשקי משתמש.
- השלב השלישי הוא חלוקת ממשק המשתמש לבקר ותצוגה.
- כל מה שנדרש כדי לקבל נתוני משתמש למערכת נמצא בבקר.
- כל מה שנדרש להעברת מידע למשתמש נמצא בתצוגה.
קצת על האופן שבו התצוגה והבקר מתקשרים עם הדגם
על ידי הזנת מידע דרך הבקר, המשתמש משנה את המודל. או לפחות, המשתמש משנה את נתוני המודל. כאשר המשתמש מקבל מידע דרך רכיבי ממשק (דרך התצוגה), המשתמש מקבל מידע על המודל. איך זה קורה? באילו אמצעים התצוגה והבקר מתקשרים עם המודל? אחרי הכל, המחלקות של התצוגה לא יכולות לקרוא ישירות לשיטות של המחלקות של המודל לקריאה/כתיבה של נתונים. אחרת, לא נוכל לומר שהמודל עצמאי. המודל הוא קבוצה של מחלקות קשורות קשר הדוק שלא לתצוגה ולא לבקר אמורה להיות גישה אליהן. כדי לחבר את הדגם לנוף ולבקר, עלינו ליישם את דפוס עיצוב החזית. חזית הדגם היא השכבה בין הדגם לממשק המשתמש, באמצעותה התצוגה מקבלת נתונים מעוצבים בצורה נוחה, והבקר משנה נתונים באמצעות קריאה לשיטות הדרושות על החזית. בסופו של דבר הכל נראה כך:
GO TO FULL VERSION