למה לתקן ולעבד יד ביד

כל מערכת תוכנה שהייתה בפיתוח פעיל במשך יותר מחודשיים בהכרח מצטברת חוב טכני.התקנות מהירות, שינוי דרישות, והלחץ להעביר תכונות חדשות מוביל לעתים קרובות קוד שביר, קשה להבין, וקשה להרחיב.שני שיטות לעמוד כמו האנטידוטות היעילות ביותר לשפל הזה: FLT:0refactoringF:1LT ו-LTF:2IDIRDIRDIRECT:2SOLIRDERE:

מתן הוא הטכניקה המודעת של בניית הקוד הקיים מבלי לשנות את התנהגותו החיצונית.הוא אינו מתקן באגים או מוסיף תכונות; במקום זאת, הוא משפר את המבנה הפנימי כך ששינויים עתידיים הופכים לבטוחים ומהירים יותר.עקרונות SOLID, שהוצגו על ידי רוברט C. Martin, מספקים מערך של הנחיות עיצוב, כאשר לאחר מכן, מניב קוד זה הוא בעל יכולת, רגיש, ומשתנה לשינוי, הן בהדרגה, כאשר הן מאפשרות לקוד מקורי, אם הוא, הוא מאפשר שינוי, אם הוא מאפשר, הוא מאפשר, באופן הדרגתי, הוא, הוא מאפשר, עם הקוד, הוא מאפשר, הוא מאפשר, הוא מאפשר, הוא, הוא מאפשר, הוא בעל ברית מקורי, הוא, הוא, הוא מאפשר, הוא מאפשר, באופן הדרגתי, הוא מאפשר, הוא מאפשר, הוא מאפשר, החל מקוד, גם, עם הקוד, אם הוא מאפשר, באופן הדרגתי, אם הוא מאפשר, עם עיצוב, אם הוא מאפשר, הוא מאפשר, באופן הדרגתי, עם מערכת של עיצוב, באופן הדרגתי, עם הקוד, באופן הדרגתי, עם הקוד, עם הקוד, הוא מאפשר, הוא מאפשר, הוא, עם הקוד, הוא מאפשר, הוא מאפשר, הוא מאפשר, הוא, כאשר הוא, כאשר הוא מאפשר, הוא מאפשר, הוא מאפשר, הוא מאפשר, הוא מאפשר, כלומר, הוא מאפשר,

בפועל, צוותי פיתוח רבים נאבקים ליישם עקרונות SOLID רטרואקטיבית. הקוד המקורי עשוי להיות מונוליטי, חד-משמעי, או מלוטש עם לוגיקה מותנית.ללא גישה שיטתית, המאמץ "לעשות את זה SOLID" מרגיש מכריע.זה המקום שבו שינוי טכניקות מאירות.על ידי שבירת העבודה לצעדים קטנים, ראויים להתנהגות, אתה יכול לשנות באופן הדרגתי קוד עד לעקרון זה, כדי לבחון את הטכניקות ברורות, כל אחת, כדי לבחון את האופן שבו הוא צריך לבחון את הדרך על בסיס מעשי, על ידי כך, על ידי כך, על ידי כך, על ידי כך, על ידי כך, כדי לבחון את הטכניקות מספקות על ידי כך, על ידי תיקון של 5 אסטרטגיות ברורות, כדי לבחון את הדרך, כדי לבחון את הטכניקות ברורות, כדי לבחון את הדרך, כדי לבחון את הטכניקות ברורות, על ידי כך, על ידי כך, על ידי כך, כדי לבחון מחדש, כדי לבחון את האופן שבו הוא צריך לשנות את הדרך, כדי לבחון את הטכניקות ברורות, על ידי כך, על ידי כך, על ידי כך, כדי לבחון את הטכניקות ברורות, על ידי כך, על ידי כך, על ידי כך, על ידי כך, על ידי כך, על ידי כך, כדי לבחון את הדרך, כדי לשנות את

הבנת העקרונות של SOLID

לפני צלילה לטכניקות של סיפוק, רצף קצר של ראשי התיבות של SOLID יקבע את הבמה:

  • (ב) סעיף 1 (ב) ל"ד: 1:1" (ב) יש רק סיבה אחת לשנות - כלומר, יש לו אחריות אחת מוגדרת היטב.
  • (FLT:0) Open/Closed Principle (OCP): ישויות תוכנה 1FLT:1 (מחלקות, מודולים, פונקציות) צריך להיות פתוח להרחבה אך סגור לשינויים.
  • (ב) ⁇ :0) החלפת עקרון (LSP): אובייקטים של סופר-מעמד צריך להיות תחליף עם אובייקטים של תת-קבוצה מבלי להשפיע על נכונות התוכנית.
  • (ב) ,0) יחסי סגירה Principle (ISPIR): לקוחות 1FLT:1 לא צריך להיות נאלץ להיות תלוי ממשקים שהם לא משתמשים בהם.
  • (FLT:0) דחייה של עקרון (DIR): 1FLT:1 מודולים ברמה גבוהה לא צריך להיות תלוי במודולים ברמה נמוכה; שניהם צריכים להיות תלויים מופשטים.

כל עיקרון מתייחס לסוג מסוים של ריח קוד.SRP נלחם בשיעורים ש"יודעים יותר מדי" אוק נאבקת בשרשראות מצב רוחיות עצומות.LSP מונעת היררכיות ירושה שבריריות.ISP נלחם בממשקים שומנים שגורמים ליישום חסר תועלת.DIP מתמודד עם הפיכה הדוקה ליישום קונקרטי.

מתן אחריות יחידה

זיהוי הפרות

הסימפטום הנפוץ ביותר של הפרה SRP הוא שיעור שיש לו יותר מאחת הסיבות לשנות.לדוגמה, מחלקה בשם FLT:0 חישוב סך הכלים, פורמטים את חשבונית לתצוגה, חוסך אותו למסד נתונים, ושולח אימייל יש לפחות ארבע אחריות.כל שינוי חישוב מס, פורמט HTML, אחסון או תוכן דואר אלקטרוני ישתנו לאותה כיתה, באופן הדוק, יחד עם הזמן, הופך חזק, לבחינה קשה, ובאופן קבוע, לבחינה קשה.

כדי לזהות את הפרות אלה, לחפש שמות מעמדיים הכוללים מילים כמו "מנדט", "Processor", "Helper", או "Util" שמות אלה לעתים קרובות להסתיר מספר רב של אחריות.בנוסף, לבחון את החתימות של הכיתה: אם כמה שיטות לקחת פרמטרים שאינם רלוונטיים לשיטות אחרות, זהו עוד רמז.

טכניקות מותאמות

(ה) ה[[המאה ה-20]] הוא [[המאה ה-1]], [[1924]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

אם ההיגיון מפוזר על פני כמה שיטות ולא כל הכיתה, השתמש ב- FLT:0Extract MethodeurFLT:1 כדי לבודד נתח מסוים של התנהגות.זה הופך את האחריות לגלויה יותר ולהתכונן את הקרקע למחלקת חילוף החומרים העתידיים.

טכניקה חשובה נוספת היא קוד Inline עם הפונקציה Calleural CallFLT 1:1 כאשר אתה מבחין לוגיקה חוזרת השייכת לתחום אחר.על ידי העברת ההיגיון הזה לתפקוד ייעודי או מעמד, אתה להפחית את שטח פני השטח של הכיתה הראשי ולעשות אחריות מפורשת.המטרה היא שכל מחלקה יכולה להיות מתוארת במשפט אחד ללא שימוש במילה "and".

החלת אישור לעקרון הפתוח / הסגור

החלפת תנאים עם Polymorphism

קוד המפר את OCP מכיל לעתים קרובות גדול FLT:5 או (FLT:6) הצהרות אשר בודקות סוג או מצב.לדוגמה, שיטה חישוב עלות המשלוח על בסיס מחרוזתFLT 7, FLT:8, או ; או LT:9 סגורה שיטות משלוח חדשות, הוספת שיטה חדשה דורש שינוי זה תנאי - הפרה ישירה של "סגורה לשינוי".

הסטנדרט המחודש כאן הוא FLT:0 [תיקון:] תנאי עם PolymorphismFelophismFelophal 1: [You created aפשט בסיס או ממשק (למשל, FLT:10) עם שיטה (FLT:11 כל שיטת המשלוח הופכת לדרגה קונקרטית.

שימוש באסטרטגיה ותבניות דקורטיביות

(ב) [ה]החלים:0] ה"ד" (ה') הוא נהג ה-OCP הקלאסי (OCP) בשלב המחודש, אתה בדרך כלל מתחיל על ידי הגדרת ממשק האסטרטגיה, ולאחר מכן להעביר את הענפים המסוכנים לשיעורי אסטרטגיה נפרדים.

(ב) [ה]: [ה], [ה],] [ה], [ה],] [ה], [ה]], [ה],] אם יש לך שיעור 12 שמפיק טקסט רגיל, אתה יכול לקשט אותו עם ה-FLT:13 או FLT:14 ללא שינוי של ה-FLT4, ללא שינוי דפוס דקורטיבי, בדרך כלל, כולל LT2:

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

מתן תמיכה ב- Liskov Substitution Principle

חוזים והתנהגויות

הפרות של LSP לעתים קרובות על פני השטח כשיטות במצע אשר זורקות יוצאים מן הכלל, להחזיר את ה-FLT:16 שבו מעמד הבסיס מחזיר אובייקט בתוקף, או מחליש תנאים מוקדמים ומחזק את תנאי הדואר.דוגמה קלאסית היא שיעור 17FLT אשר יורשים מ-FLT 18 אבל מפר את החוזה FLT:19/Fevolveve 20LT, כי יש לשמור על שני ממדים שווים.

(ב) ,הצעד הראשון הוא ל"החל" (ב) ל"החל" (ב) ל"ה' (ב) ל"ה' (ב"ב)" (ב"ב) ל"ד)" (ב"ב)"ה', "ה') ל'לא' (ה') ל'"ד', ב') יש צורך ליישב את ה' (ב') ב') ב', ב', ב', ב', ב', ב') את ה'.

שימוש ב-API כדי לחזק את LSP

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

(הופנה מהדף [[1924]]]]]] [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]

יישום Interface Segregation באמצעות Refactoring

פיצול ממשקי שומן

(ב) , לדוגמה, קיים כפליים (ב[[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]],

כאשר פיצול, לחפש קבוצות של שיטות המשמשות לעתים קרובות יחד על ידי לקוחות ספציפיים.טעות נפוצה מחולקת לממשקים זעירים רבים לפני זמן רב. Aim for role Interfaces: ממשק המייצג יכולת אחת שלקוח יכול לרצות. לדוגמה, ממשק FLT:45:45 יכול להיות בעל קיבולת כפולה וסביר להניח כי יש להפריד בין השניים.

שינוי קוד הלקוח הקיים

(ב) לאחר שממשק השומן מתחלק, עליך לספק כל לקוח רק את הממשק הרלוונטי; זהו שילוב של ההרחבה:0 Change Method SignaturephcioFLT:1 (לקבל את ממשק הצר יותר) ו-FLT:2Rename Classphig3 (לשקף את התפקיד החדש) ייתכן גם צריך לשבור כיתות יישום גדולות: אם אחד מהכיתות הוא LT (או לא רק כדי למקם את השיעור) אם לא יהיה זמין, אלא גם אם לא יהיה צורך בדרגה אחת בלבד, אלא אם הוא רק כדי ליישב את השיעור, רק כדי לפרט אם הוא לא יהיה זמין, רק כדי לפרט אם הוא חלק מהמחלקה).

אישור לחוסר ההסתמכות

המונחים: obations

(ב) [[המאה ה-20]], [[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]]

הזרקת התלות וההרסה של שליטה

(הטכניקה המחודשת של ההרחבה:0)Replace Buildor with FactorystraFLT) 1:1 ניתן להשתמש כאשר אתה לא יכול לשנות בקלות את הבונים. לחלופין, להשתמש ב-FLT:2Replace Global Reference with ParameterFLT 3: אם הכדאיות מושגת מאבן או מאתרי שירות סטטיים.

לאחר שיש לך זריקה בונה, לשקול החלת FLT:0Extract Method ObjectFLT:1 אם התלויות מוזרקות משמשות בשיטות רבות - זה יכול להיות סימן כי בכיתה עצמה יש עדיין יותר מדי אחריות.

(הופנה מהדף ה-[[המאה ה-20]], [[המאה ה-20]], [[המאה ה-20]], [[1924]]]], [[1924]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[[[1924]]]]]]]]]], [[[[1924]]]]]]]]]]]]]], [[[[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[[[1924]]]]]], [[[[1924]]]]]], [[[[1924]]]]]]]] [[[[[[1924]]

מסקנה: לעשות שינוי

עקרונות SOLID באמצעות סיפוק אינם פעילות חד פעמית, אלא משמעת מתמשכת.הטכניקות המתוארות כאן - חילוף מעמד, תנאי החלפת עם Polymorphism, Extraction, ורבות אחרות - הן אבני הבניין המאפשרות לך בהדרגה לעצב מחדש את בסיס קוד מבלי לשבור אותו.כל צעד קטן מקטין את החוב הטכני, הופך את הקוד מובן יותר, נפתח עבור בדיקות קלות וקלות יותר.

(ה) להעמיק את התרגול שלך, ללמוד קטלוג של מינוף עקרונות SOLID, רוברט קוולר (FLT:0) של האתר המספק את האתר הראשון (מספק) עבור טיפול מפורט של עקרונות SOLID, רוברט C. Martin's FLT:2Clean Codeeurs (Digital CodeFLT) מספק הסברים מעולים, זכור כי מבחנים ללא בדיקות הוא תמיד מסוכן.

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