הטמעת ארכיטקטורה נקייה עם Nest.JS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

יישום ארכיטקטורה נקייה עם Nest.JS

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

יישום ארכיטקטורה נקייה עם Nest.JS ידרוש מאיתנו להבין תחילה מהי המסגרת הזו וכיצד היא פועלת.

Nest או Nest.JS היא מסגרת לבניית יישומי Node.js יעילים וניתנים להרחבה (צד השרת) שנבנו עם TypeScript. הוא משתמש ב-Express או Fastify ומאפשר רמת הפשטה כדי לאפשר למפתחים להשתמש בכמות מספקת של מודולים (צד שלישי) בתוך הקוד שלהם.

בואו נחפור עמוק יותר במה מדובר בארכיטקטורה נקייה זו. 

ובכן, אולי כולכם השתמשתם או לפחות שמעתם על ארכיטקטורת MVC. MVC ראשי תיבות של Model, View, Controller. הרעיון מאחורי זה הוא להפריד את מבנה הפרויקט שלנו ל-3 חלקים שונים.

1. דגם: הוא יכיל את קובץ האובייקט שממפה עם Relation/Documents ב-DB.

2. בקר: זה הוא המטפל בבקשות ואחראי ליישום ההיגיון העסקי ולכל מניפולציות הנתונים.

3. הצג: חלק זה יכיל קבצים העוסקים בהצגת הנתונים, קבצי HTML או קבצי מנוע תבניתיים.

כדי ליצור מודל, אנחנו צריכים איזשהו כלי/מודול/ספרייה של ORM/ODM כדי לבנות אותו איתו. לדוגמה, אם אתה משתמש ישירות במודול, נניח 'המשך', ולאחר מכן השתמש באותו כדי ליישם כניסה בבקר שלך ולהפוך את ההיגיון העסקי הליבה שלך לתלוי ב'המשך'. עכשיו, בהמשך השורה, נניח אחרי 10 שנים, יש כלי טוב יותר בשוק שאתה רוצה להשתמש בו, אבל ברגע שאתה מחליף בו את ההמשך, תצטרך לשנות הרבה שורות קוד כדי למנוע ממנו שְׁבִירָה. כמו כן, תצטרך לבדוק את כל התכונות פעם נוספת כדי לבדוק אם היא נפרסה בהצלחה או לא, מה שעלול לבזבז גם זמן ומשאב יקרים. כדי להתגבר על האתגר הזה, אנחנו יכולים להשתמש בעקרון האחרון של SOLID שהוא עקרון ההיפוך התלות, ובטכניקה שנקראת הזרקת תלות כדי למנוע בלגן כזה.

עדיין מבולבל? תן לי להסביר בפירוט.

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

בואו ננסה להבין זאת באמצעות התרשים שלהלן.

מקור: קונוס אדריכלות נקי 

אתה יכול לראות שחילקנו את הארכיטקטורה שלנו ל-4 שכבות:

1. ישויות: בבסיסו, ישויות הן המודלים (חוקי ארגונים) המגדירים את כללי הארגון שלך ומספרים על מה האפליקציה עוסקת. שכבה זו כמעט ולא תשתנה עם הזמן והיא בדרך כלל מופשטת ואינה נגישה ישירות. למשל, לכל אפליקציה יש 'משתמש'. כל השדות שהמשתמש צריך לאחסן, הסוגים שלהם והקשרים עם ישויות אחרות יהוו ישות.

2. מקרי שימוש: זה אומר לנו איך אנחנו יכולים ליישם את כללי הארגון. ניקח שוב את הדוגמה של המשתמש. כעת אנו יודעים על אילו נתונים יש להפעיל, מקרה השימוש אומר לנו כיצד לפעול על הנתונים הללו, כמו שלמשתמש תהיה סיסמה שצריכה להיות מוצפנת, יש ליצור את המשתמש וניתן לשנות את הסיסמה בכל מקום נקודת זמן נתונה וכו'.

3. בקרים/שערים: אלו הם ערוצים שעוזרים לנו ליישם את מקרי השימוש באמצעות כלים חיצוניים וספריות באמצעות הזרקת תלות.

4. כלים חיצוניים: כל הכלים והספריות שבהם אנו משתמשים כדי לבנות את ההיגיון שלנו יהיו תחת שכבה זו, למשל. ORM, אימייל, הצפנה וכו'.

הכלים שבהם אנו משתמשים יהיו תלויים באופן שבו אנו מתעלים אותם למקרי שימוש, ובתורם, מקרי שימוש יהיו תלויים בישויות המהווה את ליבת העסק שלנו. כך הפכנו את התלות מבחוץ לפנים. זה מה שמרמז ה-Dependency Inversion Principal של SOLID.

אוקיי, עד עכשיו, הבנתם את תמצית Nest.JS והבנתם איך עובדת ארכיטקטורה נקייה. כעת נשאלת השאלה, כיצד שני אלה קשורים?  

בואו ננסה להבין מהן 3 אבני הבניין של Nest.JS ומה כל אחת מהן עושה.

  1. מודולים: Nest.JS בנוי בצורה כזו שאנו יכולים להתייחס לכל תכונה כמודול. למשל, כל דבר שמקושר למשתמש כגון דגמים, בקרים, DTOs, ממשקים וכו', יכול להיות מופרד כמודול. למודול יש בקר וחבורה של ספקים שהם פונקציות הניתנות להזרקה כמו שירותים, orm, אימייל וכו'.
  1. בקרי: בקרים ב-Nest.JS הם ממשקים בין הרשת והלוגיקה שלך. הם משמשים לטיפול בבקשות ולהחזרת תגובות לצד הלקוח של האפליקציה (לדוגמה, קריאה ל-API).
  1. ספקים (שירותים): ספקים הם שירותים/פונקציונליות הניתנים להזרקה שאנו יכולים להחדיר לבקרים ולספקים אחרים כדי לספק גמישות ופונקציונליות נוספת. הם מופשטים כל צורה של מורכבות והיגיון.

לסכם,

  • יש לנו בקרים הפועלים כממשקים (שכבה שלישית של ארכיטקטורה נקייה)
  • יש לנו ספקים שניתן להחדיר כדי לספק פונקציונליות (שכבה רביעית של ארכיטקטורה נקייה: DB, Devices וכו')
  • אנחנו יכולים גם ליצור שירותים ומאגרים כדי להגדיר את מקרה השימוש שלנו (שכבה 2)
  • אנו יכולים להגדיר את הישויות שלנו באמצעות ספקי DB (שכבה ראשונה)

סיכום:

Nest.JS היא מסגרת חזקה של Node.JS וכתב הכתיבה הידוע ביותר הקיים כיום. כעת, לאחר שהשפלת לגבי המסגרת הזו, אתה בוודאי תוהה אם נוכל להשתמש בה כדי לבנות מבנה פרויקט עם ארכיטקטורה נקייה. ובכן, התשובה היא -כן! בהחלט. אֵיך? אני אסביר בסדרה הבאה של מאמר זה. 

עד אז, הישארו מעודכנים!

אודות המחבר:

Junaid Bhat עובד כעת כמוביל טכנולוגי במעבדות Mantra. הוא חובב טכנולוגיה השואף להפוך למהנדס טוב יותר בכל יום על ידי עמידה בסטנדרטים של התעשייה והתיישר לקראת גישה מובנית יותר לפתרון בעיות. 

קרא את הבלוג האחרון שלנו: מסגרת Golang-Beego והיישומים שלה

ידע שכדאי להעביר בתיבת הדואר הנכנס שלך

בול זמן:

עוד מ מעבדות מנטרה