Table of Contents
מדוע SOLID עדיין משנה עבור מפתחים
צוותי הנדסה תוכנה משקיעים באיכות קוד מכיוון שקוד מובנה גרוע מצטבר חוב טכני מהר יותר מאשר ניתן להחזיר את עקרונות SOLID - המוגדרים במקור על ידי רוברט C. מרטין - יחד עם מסגרת זמן עבור שמירה על בסיסי קוד ניתן לשמור, לבדוק, ולהתאים את עקרונות אלה כדי למפתחים מוקדם הקריירה שלהם יכול להפחית באופן דרמטי את זמן, לשפר, שיתוף פעולה, ולהגדיר בסיס עבור מערכות מורכבות, אך ורק כדי לספק אסטרטגיות חדשות, כלומר, כלומר, כלומר, כלומר, על ידי צוותים, עם דוגמאות פשוטות, עם דוגמאות פשוטות, יש צורך, או לשבור את הטכניקות בפועל, או שיטות מתקדמות.
מה הם עקרונות SOLID?
לפני צלילה לשיטות הוראה, חיוני להבטיח מפתחי זוטר להבין את חמשת העקרונות עצמם.כל עיקרון מתייחס לדאגה עיצובית מסוימת, ויחד הם יוצרים גישה קוהרצטיבית לתכנות המוכוונות לאובייקט.כאן מדובר בהפניה מהירה:
- (FLT:0S - Singleאחריות Principle (SRP): FLT 1:1 מחלקה או מודול צריך רק סיבה אחת לשנות, כלומר זה צריך להיות אחראי על חלק אחד של הפונקציונליות של התוכנית.
- (FLT:0O - Open/Closed Principle (OCP): ישויות תוכנה 1Felot 1FLT 1 צריכות להיות פתוחות להרחבה אך סגורות לשינוי.
- (FLT:0) - Liskov Substitution Principle (LSP): סובטיפים 1 חייב להיות חלק עבור סוגי הבסיס שלהם.אם לקוח מצפה לכיתת בסיס, כל מחלקה נגזר צריך לעבוד ללא שבירת הלקוח.
- (ב) .0.I - Interface Segregation Principle (ISP): 1FLT:1 אין צורך לחייב את הלקוח להיות תלוי בשיטות שהוא אינו משתמש בהן. Interfaces צריך להיות קטן ומפורט ולא גדול ובאופן כללי.
- (FLT:0D - תלות בהסרה Principle (DIR): PH:1 מודולים ברמה גבוהה לא צריך להיות תלוי במודולים ברמה נמוכה; שניהם צריכים להיות תלויים מופשטים.
עקרונות אלה אינם כללים נוקשים אלא הנחיות עיצוב.מפתחי ג'וניור מבלבלים לעתים קרובות את ה-Acronym עם הבנה של הכוונה.הלמידה האמיתית מתרחשת כאשר הם רואים כל עיקרון בפעולה.
למה ה-Acronym יכול להיות משוחד
טעות נפוצה היא להתייחס SOLID כמבחן שיש ליישם על מנת.בפרקטיקה, העקרונות הם תלות הדדית.לדוגמה, הדבקות בעקרון האחריות הבודדה מובילה לעתים קרובות לשיעורים קטנים יותר אשר באופן טבעי לעקוב אחר עקרון הסגירה של הממשק.למד את העקרונות כמושגים קשורים זה לזה ולא חוקים נפרדים עוזר למפתחים סיבה לגבי עסקאות.
אסטרטגיות הוראה יעילות לעקרונות SOLID
סדנאות, קוד katas, ומפגשים מכוננים הם יעילים יותר מאשר הרצאות לבד. להלן אסטרטגיות מורחבות שעובדות היטב עם מפתחי זוטר.
1 שימוש באנליטיקות אמיתיות בעולם
יישם כל עיקרון לאובייקטים או תהליכים יומיומיים:
- סכין הארמייה השוויצרית מנסה לעשות הכל, אך אינה עושה דבר טוב יותר סכין מטבח כי יש לו עבודה אחת (בביצוע) באופן דומה, שיעור שמטפל בגישה של מסד נתונים, עיצוב ודואר אלקטרוני קשה לשנות.
- (FLT:0)OCP:BuildFLT:1) פתחה קירה להרחבה (אפשר לתקע במכשירים חדשים) אך סגורה לשינוי (לא לשכתב מחדש את המתפתל בכל פעם).
- (FLT:0)LSP:03FLT:1 אם יש לך מעמד בסיס ציפור עם שיטת זבוב () כל תת-השכבות (Pengee, Sparrow) חייב להיות מסוגל לעוף.פינגווין לא לעוף, כך שציפור היא עיצוב גרוע.
- (FLT:0)ISP:IRFLT:1 מדפסות מרובות פונקציונליות הדורשות ממך ליישם שיטות הדפסה, סריקה ופקס, גם אם אתה רק צריך את אנשי כוחות ההדפסה כדי להיות תלוי בשיטות לא משומשות.
- (ב) [ה]:0]DIP: ⁇ [=ה] במקום מפתח ישירות מתפתל מתג לנורה, הם חוטים אותו לשקע (התחבולות) לשקע.
2. ידיים על שיפור פעילות
(ב) יש קידוד מעוצב היטב (קבוצה אחת עושה יותר מדי, ממשקים גדולים, תלות קונקרטית) ומבקשת זוטרות לשנות את זה צעד אחר צעד.לדוגמה, להתחיל עם FLT:0 מחלקה שאילת מסד נתונים, פורמטים HTML, ושולחת אימייל.בקש מהם לפצל אותו ל-FLT:1,F:2, ו-LT3, כל אחד מהם מאפשר בדיקה טובה יותר:
למידה כללית: עקרון אחד בזמן
אל תציג את כל חמשת העקרונות בפגישה אחת. לבלות לפחות יום אחד בכל אחד מהם להתחיל עם SRP כי זה הקל ביותר לתפוס ולהניב הטבות מיידיות. ולאחר מכן לעבור ל- OCP, ולאחר מכן ל-LSP, וכו 'כל עיקרון חדש צריך לבנות על אלה הקודמים. לדוגמה, לאחר הוראה SRP, לבקש זוטרים לזהות הפרות בקוד שלהם.
השתמש ב- Visual Aids ו-Digrams
דיאגרמות בכיתה UML יכולות לעזור לדמיין מערכות יחסים.צייר תרשים "לפני" המציג מעמד מונוליטי עם חץ רבים לתלויים שונים, ו"לאחר" דיאגרמה עם כיתות קטנות, חד-צדדיות שתלויות בממשקים. השתמש בלוח לבן או כלי כמו FLT:0" DrawFLT:1 . "תזרימות עוזרות גם להסביר כיצד כאשר אתה מחיל אופל מחלקה חדשה במקום שינוי מעמד של מעמד חדש (FLT).
5.שילוב ב- Code Reviews
ביקורות קוד הן הסביבה המושלמת ל-SOLID.כאשר בוחנים את בקשתו של מפתח זוטר, להצביע על הפרות ספציפיות באופן חד-משמעי: "המעמד הזה מסתמך על נתונים, משנה אותו, וכותב אותו ל- CSV, כלומר שלוש אחריות, מה אם נצטרך לשנות את התפוקה מאוחר יותר?", מציע פיצול לתוך LT:4,LT5, ו-F יכול להתחיל שינוי זה?
6.התכנות של Pair
Pair מפתח זוטר עם מפתח בכיר במשך 30-60 דקות ביום.במהלך הפגישה, הבכיר יכול לנרמל החלטות עיצוב: "אני עושה את המהימנות הזו ממשק כך שנוכל להחליף את ההתאמות מאוחר יותר."
מלכודות נפוצות כאשר מלמדים SOLID
גם עם אסטרטגיות טובות, מפתחים זוטרים יכולים לפתח תפיסות שגויות.מודעות למכשולים אלה עוזרות למחנכים להתאים את הגישה שלהם.
Over-Engineering and Preבשלות
מפתחים של ג'וניור עשויים להתחיל ליצור ממשקים עבור כל דבר ולהתפצל לשיעורים זעירים, מה שמוביל לבימוי מופרז.למד אותם ש-SOLID הוא מדריך, לא חוק, כיתות קטנות וממוקדות הן טובות, אלא רק כאשר יש צורך אמיתי לגמישות. השתמש ב- YAG (אתה לא תזדקק לזה) כמאזן נגד.
חוסר הבנה של ה- Liskov Substitution Principle
(העיקרון המאתגר ביותר של ג'וניורס לעתים קרובות חושב שזה פשוט אומר "שימוש בירושה נכון", אבל זה על תת-ההתנהגותי.טעות טיפוסית יש שיעור 7FLT עם להגדיר Width ו להגדיר שיטות ה-Height, ו-FLT:8 8 כי יש מעלים כדי לשמור על רוחב=height זה מפר את קוד כי זה עובד עם קוד LT 9 יכול להיות ברור יותר מאשר שימוש בדוגמאות כגון:
ציות נוקשות עם הזרקת תלות
הזרקת התלות (DI) היא טכניקה ליישם את ה- DI עקביות Inversion Principle (DIP), אבל זה לא אותו הדבר.Jוניורs עשויים לחשוב כי באמצעות מיכל DI באופן אוטומטי ישספי DIP. קלמירל כי DIP הוא על בהתאם לפשטות, לא על איך אובייקטים בנויים. הצג דוגמה הזרקת סטטר שבו הכיתה עדיין תלויה בכיתה קונקרטית (DIP) כי אז לצפות לממשק מדויק.
דוגמאות לקוד מעשי (ללא מס מלא)
בעוד שאיננו יכולים להטביע בלוקים קוד ישירות, אנו יכולים לתאר שינויים בקוד בבירור.למטה הם משבשים דמויי פייתון דמויי מלכודות כדי להמחיש את ה-SRP ו- OCP.
דוגמא לפני
(ב) [ה]"ה']" (ב"ה)" (ב"ה)" (ב"ב)"ב, "ה')" (ב"ה)"ב, ב"ה')" (ב')"ב[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]], [[1924]]]]]]]], [[1924]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]] ו[[1924]], [[1924]], [[1924]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]], [[1924]]]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]]]], [[1924]]]], [[1924]], [[1924]], [[1924]], [[1924]]]]]]]], [[1924]], [[1924]], [[1924]], [[
דוגמה לפני
(ב) (ב) ב[[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]] ו[[1924]], [[1924]], [[1924]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
דוגמא לפני
(ב) (ב) יש שדה (FLT:26 ), יש לו תלות קונקרטית; להשתמש בספק דואר אלקטרוני אחר, עליך לערוך את שירות ההזמנה. Apply DIP על ידי ביצוע קונסול 28 תלוי ממשק FLT:29, ולהזריק את היישום באמצעות בונה.עכשיו הן שירות גבוה (שירות) ורמת נמוך (SmtpEmailS) תלוי בנדר מופשט (Smail)
המונחים: External Resources
למידה אינה עוצרת לאחר סדנה.שתף התייחסויות באיכות גבוהה עם זוטרים כך שהם יכולים להמשיך ללמוד באופן עצמאי.כאן כמה מקורות אמינים:
- המאמר המקורי של רוברט מרטין, "עיצוב עקרונות ותבניות עיצוב" 1Freave 1LT - המקור הסופי, אם כי צפופה.
- (ב) "אדריכלות טהורה" מאת רוברט ק.ר.ר.ר.ר.מ.ר.מ.ר.ר.מ.ר.מ.ר.ר.ר.ר.ר.ר.ר.מ.ר.ר.מ.ר.ר. "ספר מעשי שמרחיב את החשיבה האדריכלית והמחשבה האדריכלית.
- (FLT:0) שיפור דפוסי העיצוב של גורו 1 (Ralph 1) - הסברים אינטראקטיביים מצוינים המציגים כיצד דפוסים מתייחסים ל-SOLID.
עודד זוטרים לקרוא פרק אחד בשבוע ולנסות לזהות SOLID במסד הקוד הקיים שלהם.You יכול גם ליצור רשימת קריאה משותפת באמצעות כלי כמו FLT:0 NotionFLT:1 או צוות wiki.
התקדמות
איך יודעים אם ההוראה שלך יעילה?חפש סימנים כגון:
- מפתחים של ג'וניור מספקים קוד לפני הגשת יחסי ציבור.
- הם מתחילים להשתמש במילים כמו "בגידה", "הפנימה", "עצמאות" בדיונים של עמידה או עיצוב.
- מספר בקשות לשינוי ב- PRs הקשורים להפרות עיצוב יורד לאורך זמן.
- הם יכולים להסביר מדוע הם עשו בחירה עיצובית מסוימת באמצעות SOLID.
מפגשים קבועים של אחד על אחד שבו אתה סוקר את העבודה האחרונה שלהם ולשאול "האם הכיתה הזאת תהיה פשוטה יותר?", יכול לחזק את הלמידה.חשב שיש להם להציג מחדש את הצוות, להסביר את זה לפני ואחרי.
שאלות נפוצות של מפתחים
ש: האם אני תמיד צריך לעקוב אחרי SOLID?
עבור פרויקטים קטנים, דבקות נוקשה יכולה להיות overkill.העקרונות הופכים להיות יותר יקר כמו בסיס הקוד והצוות לגדול. השתמש בשיפוט שלך: אם עבירה גורמת לכאב (קשה לבדוק, שינויים תכופים לשבור חלקים אחרים), ולאחר מכן ליישם את העיקרון.התחל עם SRP ו- OCP כי הם מציעים את היתרון המיידי ביותר.
ש: האם זה בסדר להיות בעל מעמד "מרוצה" שמעצב הרבה שיעורים קטנים יותר?
התזמורת היא אחריות לגיטימית.כל עוד הסיבה היחידה של המחלקה לשינוי היא כיצד היא לתאם את תת-השותפים (לא את ההיגיון של כל רכיב), זה בסדר.לדוגמה, aFLT:30 קורא שירות חשבונית, שירות תשלום ושירות הודעות.אם תהליך העסק משתנה, לשנות את התזמורת.
ש: האם אני יכול להשתמש ב-SOLID עם תכנות פונקציונלי?
SOLID הוגדר עם OOP בראש, אבל עקרונות דומים חלים בתכנות פונקציונלית.לדוגמה, פונקציה טהורה היא אנלוגית לכיתה עם SRP - זה עושה דבר אחד. ציות תסכול לעתים קרובות מתורגמים לתפקודים כפרמטרים (זריקת תלות של התנהגות). אז הרוח של SOLID חלה על פני פרדיגמות.
בניית תרבות SOLID
הוראה SOLID אינה אירוע חד פעמי.הוא דורש הטמעת העקרונות לתוך זרימת העבודה של הצוות.חשבו על שיטות בניית תרבות אלה:
- (ב) ⁇ :0) , ⁇ (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) שעות נוספות: 1FLT:1 Dedicate Fridays כדי לתקן קוד מורשת עם הפרות SOLID.
- מועדון הספרים:0 (EveFLT:1) קרא "קוד נקי" או "תבנית עיצוב ראשונה" יחד ודן ב-SOLID בהקשר.
- (ב) ⁇ :0) ,(פרק:0) 1 (כולל זוטרים מוטיבציה) שהפכו למומחים ב-SOLID.
מסקנה
הוראה עקרונות SOLID למפתחים זוטרים היא השקעה שמשלם באמצעות עלויות תחזוקה מופחתות, פחות רגרסנסים, ועוד חברי צוות בטוחים יותר.אסטרטגיות המתוארות - אנלוגיות בעולם האמיתי, למידה מצטברת, ידיים על סיפוק, ביקורות קוד וזוג תכנות - לעשות בהירות מופשטת יותר ויותר עם קבוצות גאווה ובלבול יכול להימנע על ידי הדגשה על ידי פרגמטיות וספקת קוד חיצוני, אבל תמיכה עיצובית, כי לא יעילה יותר ויותר.