Table of Contents
הבנה של חששות במערכות תוכנה שכבתיות
הפרדת חששות (SoC) הוא אחד העקרונות המתמשכים והמשפיעים ביותר בהנדסת תוכנה.זה מדריך מפתחים לחלוקה למערכת לחלקים נפרדים, כל אחד אחראי על היבט יחיד, מוגדר היטב של הפונקציונליות הכוללת. במערכות תוכנה שכבתיות - שבו האדריכלות מאורגנת ל tiers אופקיים כמו מצגת, לוגיקה עסקית וגישה נתונים - יישום יעיל של SoC הופך להיות עמוד השדרה של יכולת שמירה, יכולת, בהירות, בהירות, ובהירות זו.
בליבתו, SoC הוא על ניהול המורכבות.על ידי בידוד חששות שונים, אתה להפחית את העומס הקוגניטיבי הנדרש כדי להבין כל חלק אחד של המערכת.שינויים הופכים לבטוחים ומהירים יותר, בדיקות הופכות ליותר ממוקדות, והמערכת כולה הופכת ליותר יעילה לדרישות מתפתחות.
מה זה הפרדה של דאגות?
הפרדת חששות היא עיקרון עיצוב המכתיב כי מערכת תוכנה צריכה להישבר לחלקים החפיפה בפונקציונליות מעט ככל האפשר.כל חלק – בין אם מודול, שיעור, שכבה או פונקציה – צריך לבודד דאגה או אחריות מסוימת.המונח היה פופולרי על ידי אדסגר דייקסטרה במאמרו משנת 1974 "על תפקידה של המחשבה המדעית", שבו טען כי הפרדת חששות היא חיונית לניהול המורכבות.
בפועל, SoC אומר כי כאשר אתה מסתכל על רכיב, אתה צריך להיות מסוגל לתאר את מטרתו במשפט אחד ללא שימוש במילה "ו" לדוגמה, שיעור שירות ב backend עשוי לטפל "אימות משתמש" אבל לא גם "הגדרה דואר אלקטרוני" או "חיבור בסיס נתונים" תועלת הופכת ברורה כאשר אתה צריך לשנות משהו: שינוי איך הודעות דוא"ל לא צריך לדרוש שינויים כדי לאמת ההיגיון.
עקרונות של הפרדה יעילה של דאגות
כדי להשיג הפרדה יעילה של חששות במערכות שכבתיות, עליך לדבוק במספר עקרונות מקושרים.כל אחד מחזק את האחרים, ויחד הם יוצרים את הבסיס של תוכנה אמינה.
עקרון אחריות יחיד (SRP)
לעתים קרובות נחשב אבן הפינה של SoC, אחריות יחידה Principle קובע כי מודול, מחלקה או שכבה צריך רק סיבה אחת לשנות. במערכת שכבה, זה אומר שלכל שכבה יש תפקיד יחיד, מוגדר היטב.המצגת מטפל אינטראקציה המשתמש; שכבת לוגיקה עסקית מיישמת כללים דומיין; שכבת הגישה של נתונים לניהול עקשנות.
אדריכלות שכבת
אדריכלות שכבתית היא ההתגלמות המבנית של SoC. Systems מאורגנת בפני מטיפים נפרדים, כל אחד עם תפקיד ספציפי וממשק מוגדר היטב לשכבות הסמוכים שלה.התבנית הנפוצה ביותר היא שלוש שכבות: שכבת מצגת (UI), שכבת יישומים (לוגיקה עסקית), ושכבת נתונים (פרסיומית הופכת את מסד הנתונים הלוגי יותר, שכבות נוספות כגון שירות, דומיין, ותשתיות עשויות להיות מוצגות המפתח הוא זה רק עם שכבת החלפת תאים ישירים (למשל) באופן ישיר, לדוגמה, החל מתואם את המודל הישיר (למשל, כלומר, כלומר, כלומר, כלומר, כלומר, שימוש בתבנית לוגיקה ישירה) באופן ישיר, שימושית) באופן ישיר יותר, תוך כדי הפעלת קובץ נתונים (למשל, שימוש ב- API).
סליחות
Encapsulation הולך יד ביד עם SoC. כל שכבה או מודול צריך להסתיר את פרטי היישום הפנימי שלה לחשוף רק את מה נדרש עבור שכבות אחרות כדי אינטראקציה עם זה.זה מונע הפיכה בלתי מאויש ומפחית את ההשפעה של קרוע של שינויים. במערכת שכבת נתונים, אלא אם כן גישה נתונים מושפעת יכול לבודד את כל השאילתות והפרטים של schema מאחורי שכבה חוזרת של לוגיקה.
המונחים:
אבסטרציה מפרידה את המדיניות ברמה גבוהה מפרטי יישום ברמה נמוכה.זה מאפשר לך להגדיר מה מרכיב עושה מבלי לציין כיצד זה עושה את זה. במערכות שכבתיות, מופשטת מושגת בדרך כלל באמצעות ממשקים או שיעורים מופשטים המגדירים חוזים בין שכבות.לדוגמה, ממשק "שירות תשלום" יכול להגדיר שיטה לעיבוד תשלומים, עם יישום קונקרטי של PayPal, Stripe, או בכרטיס אשראי בית.
« « OUT COUPING
הפיכה חופשית פירושה צמצום התלות בין שכבות ורכיבים כך שלשינויים בחלק אחד יש השפעה מינימלית על אחרים.הפיכה הדוקה לעתים קרובות עולה כאשר שכבות ישירות לגשת למבנים הנתונים הפנימיים של שכבה אחרת, או כאשר הם מכנים שיטות תלויות בפרטים יישום ספציפיים.כדי להשיג הפיכה רופפת, להסתמך על בדיקות מופשטות (פניות) וזריקת גבול תלויה.
היתרונות של יישום עקרונות אלה
בעוד שהעקרונות עצמם יקרים, התגמול האמיתי מגיע מהיתרונות שהם מספקים על פני מחזור החיים של פרויקט תוכנה, בואו נבחן כל תועלת בפירוט.
שיפור יכולת
כאשר החששות מופרדים באופן נקי, משימות תחזוקה הופכות מקומיות.אג בתבנית נתונים קבוע בשכבה המצגת; שינוי כללי חישוב המס משנה רק את השכבה העסקית.ללא SoC, שינוי פשוט לכאורה יכול לקרוע דרך שכבות מרובות, הדורש מפתח להבין ולשנות קוד על פני כל הערימה.זה מגביר את הסיכון של פירוק פונקציונליות ללא כוונה ללא קשר.
המונחים: Scalability
אדריכלות שכבתית עם הפרדה ברורה של חששות בקנה מידה לא רק במונחים של ביצועים, אלא גם מבחינת ארגון צוותים מרובים יכול לעבוד על שכבות שונות בו זמנית ללא נקיטת נקודות אחד של השני.לדוגמה, צוות הקדמי יכול לפתח את שכבת המצגת בעוד צוות backend עובד על לוגיקה עסקית גישה נתונים. ביצועים מדרג גם יתרונות: אתה יכול לדרג את שכבת הנתונים באופן עצמאי מן השכבה האופקית אם אתה קורא חוויות קודק, אתה יכול להוסיף רזולוציה גבוהה יותר, 000 של קוד לוגיקה עסקית.
יעילות טובה יותר
ניתן לבדוק שכבות מבודדות באופן עצמאי באמצעות בדיקות יחידה או בדיקות אינטגרציה שלעגו לתלויים של שכבות סמוכים.לדוגמה, בדיקת שכבת ההיגיון העסקית הופכת להיות פשוטה: אתה מספק מבחן כפול עבור שכבת הגישה לנתונים ולוודא כי הנתונים לוגיקה עסקית מעבדים נתונים נכון. בדומה, שכבת הגישה לנתונים ניתן לבחון בבידוד נגד מסד נתונים אמיתי או תחליף לא מודע זה, גישה זו מגבירה את האמון במערכת תיקון של תיקון ופעולות נוספות, כאשר אתה מתואם את הבדיקה (TCC) יעילה יותר, כאשר אתה עושה בדיקות יעילות יותר, כאשר אתה עושה בדיקות יעילות יותר, כלומר, מוטציות.
הגדלת יכולת
כאשר מרכיבים מעוצבים עם דאגה יחידה, מוגדרת היטב, הם הופכים למועמדים טבעיים לשימוש חוזר בפרויקטים שונים או בתוך אותו פרויקט. A-A-A-A-A-A-Aסיומת "שירות דואר אלקטרוני" ממושכים, ניתן להשתמש בהם בתכונות מרובות. ממשק "משתמשי-Repository" יכול להיות בשימוש על ידי כל רכיב שצריך לגשת לנתונים של משתמשים, בין אם זה המודול, ה-A, או קצה של API, או שכפול של מערכת הפעלה, או שכפול של יישומים, כמו פונקציות של יישומים שונים.
מלכודות נפוצות להימנע
גם עם הכוונות הטובות ביותר, מפתחים נופלים לעתים קרובות למלכודת המתערערת את הפרדת החששות.מודעות למכשולים אלה היא חיונית לשמירה על ארכיטקטורה נקייה.
Over-Engineering and Preבשלות
טעות נפוצה אחת יוצרת יותר מדי שכבות או מופשטת כל שינוי אפשרי לפני שהיא נחוצה.זה מוביל למורכבות מיותרת ומפר את העיקרון של "אתה לא תזדקק לזה" (YAGNI) התוצאה יכולה להיות מערכת שבה הבנה בקשה פשוטה דורשת ניווט של חמישה שכבות של עקיפה. Stick למספר השכבות שהופכות את התחושה לבעייתך.
« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «
מופשטת שאינה מסתירה לחלוטין את פרטי היישום שלה נאמר להיות "שבילה" לדוגמה, ממשק מאגר שחושף שיטות החזרת חריגים של מסד נתונים גולמי כוחות שכבת לוגיקה עסקית לטפל בדאגות ספציפיות מסד נתונים.זוגות אלה הלוגיקה העסקית לפרטים של שכבת הנתונים.כדי להימנע מכך, להבטיח כי אבסטרקטיונים נועדו לתפוס ולתרגם חריגים נמוכים לשגיאות ספציפיות לתחום.
מודל אנמי
לפעמים, SoC נלקח רחוק מדי, וכתוצאה מכך מודל דומיין אגמי שבו כל לוגיקה עסקית מועברת לשיעורי שירות נפרדים, משאיר את האובייקטים התחום כבעלי נתונים פשוטים ללא התנהגות. בעוד זה מפריד חששות במובן מסוים, זה יכול גם לפזר לוגיקה עסקית על פני שירותים רבים, מה שהופך את המערכת קשה יותר להבין ולשמור.המפתח הוא למצוא את האיזון הנכון: לאפשר אובייקטים לחדור התנהגות כי הוא קשור באופן מקיפים אותם לעתים קרובות מערכת ההפעלה מורכבת או מתארת שירותים מורכבים.
שכבות חד-פעמיות צמודות באמצעות מדינה משותפת
עוד נפילה היא שיתוף מצב מוליד בשכבות.לדוגמה, שכבת עסקים המאמת את הטון העולמי ששכבת המצגת קוראת גם מציגה שינויים נסתרים.שינויים ב-oneton יכולים לגרום להתנהגות בלתי צפויה בכל שכבה שנוגעת בו.במקום, להעביר נתונים באופן מפורש באמצעות פרמטרים או להשתמש ב- unmutable data transfer Objects (DTOs) כדי לתקשר בין שכבות.
יישום מעשי בDirectus
Directus, כמסגרת אחורית ללא ראש, מדגים רבים מהעקרונות שנדונו.אדריכלות שלה בנויה על מודל שכבתי שבו זמן הריצה הליבה מנהל גישה לנתונים ורשאות, בעוד הרחבות - נקודות קצה, נרגילות ושירותים - משתפות בתוך גבולות מוגדרים היטב.כאשר מפתחים הרחבות לDirectus, הדבקות בהפרדה של חששות מבטיח הקוד שלך נשאר בר קיימא וניתן לשמור על הדרג.
לדוגמה, בעת יצירת נקודת קצה אישית, עליך להפריד את הלוגיקה של טיפול בתוואי (ייצוג) מלוגיקה עסקית (שירות) וגישה לנתונים (repository) Directus מספק הזרקת התלות וגישה ללקוח מסד הנתונים ושכבת ה-Cache, אבל אתה צריך לבודד שאילתות מסד נתונים בנקודת עצירה ייעודית ולא לפזר שאילתות גלם ב-endpointer.
Directus תומך גם בצריפים שאשים על אירועי מחזור חיים (למשל, לאחר שמוצר נוצר) כדי לשמור על SoC, מטפל מוצ'ר צריך להאציל שירות המבודד את ההיגיון העסקי המופעל על ידי אירוע זה.הנו עצמו צריך רק לטפל בהקשר ולקרוא לו שיטת השירות המתאימה.זה שומר על ניצוץ דק וממוקד באחריותם היחידה: להגיב לאירוע.
בנוסף, מערכת הרשאות של Directus מאחסנת צורה של הפרדה בין גישה לנתונים לבין לוגיקה עסקית. משתמשים ותפקידים מגדירים מה הם יכולים לראות ולעשות, וההלב קורא את ההרשאה לפני ביצוע כל ניתוח נתונים.כאשר אתה בונה לוגיקה אישית, עליך לכבד את אותו מודל על ידי בדיקת הרשאות דרך עוזרי הסיוע הניתנים ולא לעקוף אותם.
מסקנה
הפרדה יעילה של חששות במערכות תוכנה שכבתיות אינה מקבילה ארכיטקטונית אופציונלית - היא תרגול קריטי עבור מערכות בנייה שניתן לשמור, בקנה מידה, ו מובן לאורך זמן. על ידי הדבקות לעקרונות של אחריות יחידה, אדריכלות שכבתית, encapsulation, אבסטרקטיון, והפיכה חופשית, מפתחים ליצור בסיסים קודים כי הם גמישים לשנות וידידותיים לשיתוף פעולה.
כפי שאתה מעצב את המערכת הבאה שלך או מרחיב את הקיים, לשמור את העקרונות האלה בראש, בין אם אתה עובד עם Directus, מסגרת אחרת, או בניין מאפס, משמעת של הפרדה חששות ישלם דיבידנדים עבור כל מחזור החיים של התוכנה.עבור קריאה נוספת, לחקור את הגישה FLT:0Separation של חששות על ויקיפדיה FLT:1,LTF:2 LT:2 של מרטין Fows: 3, 000 LT, 000 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇