כיצד להשתמש ב- Uml Diagrams כדי לדמיין אדריכלות סולידריות
הבנה של עקרונות SOLID
עקרונות SOLID הם 5 הנחיות עיצוב מוכווני אובייקטים המסייעים למפתחים ליצור מערכות שקל יותר לשמור, להרחיב ולבדוק.הם הוצגו על ידי רוברט C. מרטין בתחילת שנות ה -2000 ומאז הפכו לאבן הפינה של ארכיטקטורת התוכנה המודרנית.כל עיקרון מתייחס להיבטים ספציפיים של עיצוב תוכנה:
- (ב) סעיף:0) אחריות אחריות עקרון (SRP): "FLT" 1:1 מחלקה צריכה להיות רק סיבה אחת לשנות, כלומר, זה צריך להיות אחראי פונקציונליות אחת.
- (FLT:0) Open/Closed Principle (OCP): כיתות 1FLT צריכות להיות פתוחות להרחבה אך סגורות לשינוי - ניתן להוסיף התנהגויות חדשות מבלי לשנות את הקוד הקיים.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) [ה]הסברים הבין-אישיים (ISPIR): לקוחות 1FLT:1 לא צריך להיות נאלץ לסמוך על ממשקים שהם אינם משתמשים; עדיף שיהיו ממשקים קטנים, ספציפיים רבים מאשר ממשק גדול, כללי.
- (FLT:0) עקשנות דחייה Principle (DIR): PH:1 מודולים ברמה גבוהה לא צריך להיות תלוי במודולים ברמה נמוכה; שניהם צריכים להיות תלויים מופשטים.
תפקיד UML ב- Software Architecture Visualization
שפה מודלית לא מזוינת (UML) מספקת מחיקה סטנדרטית של עיצוב מערכת הדמיה. דיגרמה לפעול כמו שפה משותפת בין מפתחים, אדריכלים ובעלי עניין, מה שהופך אותו קל יותר לתקשר מבנים מורכבים.כאשר החל אדריכלות SOLID-compliant, דיאגרמות UML לחשוף כמה טוב העיצוב לדבוק עקרונות ומדגיש אזורים שעשויים להיות צורך לשנות.
UML כולל 14 סוגי דיאגרמות, אבל הרלוונטי ביותר עבור SOLID הדמיה הם דיאגרמות בכיתה, דיאגרמות רכיב, דיאגרמות רצף, ודיאגרמות החבילה.כל סוג דיאגרמה יכול להדגיש היבטים שונים של העקרונות - לדוגמה, דיאגרמות בכיתה להראות אחריות וממשקים, בעוד דיאגרמות רכיב מדגישות כיוונים תלותיים ונקודות התעלות.
מיפוי UML Diagrams לכל SOLID Principle
אחריות יחידה ומדורגת
דיאגרמות הכיתה אידיאליות לאמת תאימות SRP. תרשים בכיתה מעוצב היטב מראה לכל שיעור עם קבוצה ברורה וממוקדת של תכונות ושיטות.אם לכיתה יש מספר רב של אחריות, תיבתה בתרשים תכיל פעולות שאינן קשורות - דגל אדום להפרות SRP.
לדוגמה, מחלקה בשם "חשבונית" שמטפלת הן בחישוב חשבונית והן במייל שנשלח מפרה SRP. הדיאגרמת הכיתה תציג שיטות כמו "מחשבה מלאה" ו-'sendEmail() בתוך אותה קופסה, אותת הצורך לפצל את הכיתה ל-'חשבונית' ו'שירות הדואר האלקטרוני' מסייע לתפוס הפרות מוקדמות.
Open/Closed Principle and Component Diagrams
דיאגרמות בולטות ממחישות את המבנה ברמה גבוהה של מערכת, המציגות כיצד רכיבים (למשל, מודולים, תת-מערכת) להתחבר באמצעות ממשקים. לדבוק ב- OCP, רכיבים צריכים לחשוף ממשקים קבועים תוך כדי לאפשר יישום חדש ללא שינוי של אלה הקיימים.
בתרשים רכיב, אתה יכול לייצג את זה באמצעות ממשקים מסופקים ונדרש. רכיב של 'PaymentProcessor', למשל, עשוי להגדיר ממשק 'Payment'. שיטות תשלום חדשות (כרטיס אשראי, PayPal) מותווסף כמרכיבים נפרדים אשר מיישמים ממשק זה.הדיאגרמה מבהירה כי מעבד הליבה אינו צריך להשתנות - זה רק תלוי בהפשטות.
Liskov Substitution Principle and Inheritance Hierarchies
דיאגרמות הכיתה עם מערכות יחסים ירושה ישירות לבדוק את LSP.אם תת-מחלקה מנטרת שיטות מעמד בסיס בדרכים המפרות התנהגות צפויה, ההיררכיה היא חשודה. UML מאפשר לך מודל תנאים מוקדמים, תנאים לאחר, וחלויות באמצעות מגבלות (למשל, בהערות או OCL - Object Constraint Language).
הפרה קלאסית של LSP היא "מעמד של ריבוע" יורשה מתוך "Rectangle" בתרשים, אם "Square" שינויים "setWidth()" כדי להגדיר גם "height", זה שובר את הדיאגרמת "Rectangle" (Rectangle) דיאגרמה צריך להראות כי "Square" אינו תחליף באמת.
Interface Segregation Principle and Interface Diagrams
UML יכול מודל ממשקים באופן מפורש באמצעות תיבות ממשק (עם ה- ’SearFLT:0> סטריאוטיפ) לאכיפת ISP, אתה יוצר ממשקים קטנים רבים במקום ממשק גדול אחד.ה ⁇ מגלה אילו שיעורים תלויים באיזה ממשק; אם בכיתה יש שיטות לא בשימוש בממשק, זה הפרה.
לדוגמה, במקום ממשק "MultiFunctionPrinter" עם "print()" ,'scan()', 'fax(', אתה מתחלק ל'Printable', 'Scannable' ו-'Faxable', התרמית של הכיתה מראה כי 'מדפסת לב' רק מיישם את 'ההתאמה', בעוד 'מתאים לכל שלושת הלקוחות הלא רלוונטיים'.
תלות ב-Inversion Principle and תלות ב-Digrams
שני דיאגרמות הכיתה ואגרמות החבילה יכולות להמחיש את תאימות DIP.DIP קובע כי מודולים ברמה גבוהה (למשל, לוגיקה עסקית) לא צריכים להיות תלויים במודולים ברמה נמוכה (למשל, מנהלי מסד נתונים) במקום זאת, שניהם צריכים להיות תלויים בהפשטות (interfaces או כיתות מופשטות).
בתרשים תלויות החבילה, אתה יכול להראות את הכיוון של תלות.אם חבילה ברמה גבוהה מצביע ישירות על חבילה ברמה נמוכה, הדיאגרמות מזהירות על הפרה DIP. הפתרון הוא להציג מופשט (interface) בחבילה ברמה גבוהה, עם החבילה ברמה נמוכה בהתאם לממשק זה.ההדאגרמה המעודכנת מראה הפחתה של תלות הפוכה - סימן ברור של תאימות SOLID.
שיטות טובות ליצירת UML Diagrams for SOLID Architecture
בצע את ההנחיות האלה כדי לייצר דיאגרמות UML נקיות, אינפורמטיביות שמחזקות את עקרונות SOLID:
- [ה] [ה]] [ה]]] [ה]]] [ה]] [ה]]] [ה']'[ה']'[ה]'[ה]']'[ה']'[ה]'[ה']'[ה']'[ה']'[ה']']'''''''''''''''''']'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) ,ד"ח רק יחסים רלוונטיים: FLT:1 Show ירושה, התאגדות, תוקפנות, וחץ תלותי שבו הם חשובים.
- (הפרת אור גבוהה:0) הפרות: 1FLT ( 1) השתמש בצבעים שונים או קווים מחוסנים כדי לסמן יחסים בעייתיים.לדוגמה, חץ תלות אדום מקוד גבוה לרמה נמוכה יכול לדגל הפרה של DIP.
- (ב) [ה]החלת: [ה], [ה], [ה], [ה],] כרצונך [לעמוד] [ב], [ה], [ה]]], [ה], [ה], [ה], [ה], [ה], [ה]]]התקבלו] את ה-[[הההההה'] כ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
מלכודות נפוצות וכיצד להימנע מהם
אפילו מפתחים מנוסים יכולים ליפול למלכודת בעת שימוש ב- UML כדי לעצב ארכיטקטורות SOLID.כאן שגיאות תכופות ודרכים להזיז אותם:
- (FLT:0) מוקדם יותר:FreaLT:1 (התחל עם יותר מדי ממשקים או שיעורים יכול להפר YAGNI (אתה לא תזדקק לזה) להתחיל עם דיאגרמת מחלקה פשוטה, ולאחר מכן להוסיף מופשט רק כאשר נדרש על ידי עקרונות SOLID - בדרך כלל במהלך מתן מחדש.
- (הופנה מהדף UML Notation: FIRLT:1) סוגי חצים מרתיעים (למשל, באמצעות חץ כללי שבו חצים תלות הוא הנכון) יכול להוביל להפרעה. למד UML 2.5 יסודות ספציפיים כדי להימנע מעמימות.
- (FLT:0) אבחון LSP בתרשיםים רצף: המחשה של תרשים הסתברות 1 מראה אינטראקציות רצופים.אם אובייקט תת-class מוחלש לאובייקט מעמד בסיס והאינטראקציה משנה התנהגות באופן בלתי צפוי, ה-LSP שבור.
- (FLT:0) ,Negting obencyכיוון:FreaLT:1 ; DIP הוא על כיוון תלותי.באגרמות החבילה, תמיד שואבות חצים מלקוח לשרת.אם אתה רואה מחזורים או חצים מצביעים בדרך הלא נכונה, מחזירים את הפשטות.
- (FLT:0) דיאגרמות ממתין מפורטות מדי:FLT:1 A Class דיאגרמה המציגה כל מפרש וחיפוי על הנוף. להתמקד בממשקים ציבוריים ובמערכות יחסים מפתח אשר לאכוף עקרונות SOLID.
כלים ליצירת UML Diagrams
כמה כלים יכולים לעזור לך ליצור דיאגרמות UML שנשארות מסונכרנות עם קוד.בחר אחד שמתאים זרימת העבודה שלך:
- (ב) [ה]:0 [ה][דרוש מקור]] [ה]] [ה]] [ה]]] [ה]]] [ה]]]] [הה]]]]][ה]]], [הההההתאמת [ה] [ה] [ה]] [ה]] [התב"ה']]]]]] [ה'[ה']']']']']']'[ה'[ה']'[ה'[ה'[ה'[ה'[ה'[ה'[ה'[ה'[ה'[ה']'[ה'[ה']']'[ה']']'[ה'[ה']'[ה']']'[ה']']']'[ה'[ה']']'[ה'[ה'[ה']']'[ה'[ה']']'[ה'[ה'[ה'[ה'[ה'[ה']']'[ה'[ה'[ה'[ה'[
- (FLT:0) Draw.io (diagrams.net): איור 1 ( 1) עורך דיאגרמה חינמי, מבוסס אינטרנט. תומך ב- UML stencils ו- Easyיצוא.Good for Cooperation whiteboarding.
- [ה]העיקרון [ה]: [ה]] [ה]]] [ה]]] [ה]]]] [ה]]]], [ה]]] [ה]]]]], [ה]], [ה], [ה]], [ה], [ה]], [ה]], [התקבלה],], [הת] היא [הת] היא [הת], היא [הת] היא], היא [הת], היא [הת ה'[ה'[ה'[ה'[ה'[ה'[ה'[ה'[ה'], ו'[ה'[ה'[ה']
- (FLT:0)Modelio:FLT:1 כלי קוד פתוח התומך UML ו- BPMN יכול ליצור קוד מתוך דיאגרמות ייצוגיות וקוד קיים הפוך.
- (FLT:0) IntelliJ IDEA Ultimate:FLT:1 כולל תכונות מובנות של דיאגרמות בכיתה, חבילה ודיאגרמות תלותיות עובד ישירות עם בסיס הקוד שלך עבור סינכרוניזציה חיה.
(ב) הבנה עמוקה יותר של עקרונות SOLID ושילוב UML, ניתן להתייחס לכתיבה המקורית של רוברט C. Martin על FLT:0 העקרונות של OOD (PDF) ,IFLT:1 ואת המאמר ויקיפדיה על FLT:2SOLIDעקרונות FLT 3:0.
מסקנה
דיאגרמות UML הופכות עקרונות SOLID מופשטים למודלים חזותיים קונקרטיים שמפתחים יכולים לבדוק, לדון ולשפר. על ידי מיפוי כל עיקרון לסוג הדיאגרמה המתאים - דיאגרמות הכיתה עבור SRP ו- ISP, דיאגרמות רכיב עבור OCP ו-DIP, ו- DIP ירושה היררכיות ל-LSP - אתה יכול לוודא באופן שיטתי כי הארכיטקטורה שלך נשארת גמישה, גמישה, ומדורגנת.
המפתח הוא להשתמש ב- UML לא כחפץ ביורוקרטי אלא ככלי חי מתפתח עם הקוד שלך. בשילוב עם דור דיאגרמה אוטומטי וסקירות קוד קבוע, UML הופך לבעל ברית רב עוצמה בבניית מערכות SOLID-Compliant שעומדות במבחן הזמן.