Clean Architecture – פוסט העשרה
-
Clean Architecture – פוסט העשרה
**Clean Architecture** 📰
לאחרונה יצא לי להרצות בשתי פורומים שונים על ארכיטקטורה שהתוועדתי אליה באחת העבודות הקודמות שלי.
התנסיתי בה באופן אישי, במשך כמה חודשים טובים, בארגון שקיבל החלטה להעביר service מ .Net Famework ל .NetCore 3.x, וה CTO בחברה לקח כמה החלטות ארכיטקטוניות ובכללם ללכת על הארכיטקטורה הזאת, פלוס עוד כמה מתודולוגיות פיתוח ו design patterns שאפרט בסוף.▶ **תוכלו למצוא בתגובות או בבלוג, את המצגת וגם וידאו הקלטה של ההרצאה** ◀
היא הוצגה ע”י רוברט ססיל מרטין, AKA “דוד בוב”, שמוכר ביותר בפיתוח עקרונות רבים לתכנון תוכנה ובהיותו מייסד המניפסט האג’ילי. בנוסף חמישה מעקרונותיו של מרטין נודעו יחד כעקרונות ה SOLID
הארכיטקטורה מכסה הרבה קונספטים בעייתיים ולכן היא קצת קשה להכלה,
היא לוקחת הרבה מאוד בעיות בתכנות ומנסה לפתור אותםבאופן אישי – מה שהכי אהבתי בארכיטקטורה, הקלות שבה אפליקציה עוברת frameworks.
אם למשל ניקח כדוגמא שירות דוטנט, נוכל להמיר אותו בקלות לאפליקציית אנגולר, ולקחת ממנו את החלקים הרלוונטיים כמו שכבת המודלים הנקייה, או business rules שמעוניינים בהם. פשוט נדרש לעשות התאמות נדרשות למעבר בין שפות C# ל TS
אין שום external resource dependency בשכבות הנ”ל, הקוד הוא pure לגמרי, ומשקף נטו את ה essence של האפליקציה.
הקונספט המרכזי של הארכיטקטורה של בוב, הוא הקו של קוד נקי pure code ככל שניתן,
לדעתי זהו שיקול שאמור להיכלל בקבלת כל החלטה על ארכיטקטורה שהיא.
בעידן שבו יש סחרור טכנולוגי, זה הופך את זה לשיקול מרכזי.בעיניי, בקונספט הזה, זה לא חייב להיות ארכיטקטורה שחייבים להיצמד, אלא החלטה שהארגון מקבל ומנחיל לעובדים כמו ה solid principals .
אני הייתי מוסיפה פשוט ל SOLID את סיומת PC כדי להזכיר את עקרון ה pure code בכל כתיבה בכל קובץ שהוא במערכת.למה בכלל ארכיטקטורה?
ארכיטקטורות מאפשרות ניתוק יחידות שונות של הקוד שלך בצורה מסודרת ומנוהלת. באופן זה קל יותר להבין, לשנות ולבדוק את הקוד.
בארגון גדול, שבו צוותים שונים נוגעים באותו קוד, ומתכנתים מתחלפים בקצב, ארכיטקטורה עוזרת להחיל קונבנציות ארגוניות מקובלות אשר מקלות על נראות, קריאות ותחזוקת הקוד לטווח הרחוק.יש כמה ארכיטקטורות דומות כמו זאת,
ולכולם אותה מטרה שהיא Separation of Concerns. וכולם משיגים הפרדה זו על ידי חלוקת התוכנה לשכבות.הדבר שהכי מאחד אותם הוא שכולם מאפשרות לך לייצר ארכיטקטורה שהיא free of cycles –
no circular dependency, ועדיין מצליחה לתקשר בין השכבות בצורה אפקטיבית.מה שמוודא שכאשר יש שינוי בקוד, הוא יתקל במהרה firewall , בקצה של השכבה הנוכחית שבה מעניין השנוי, מאשר להתפשט לעבר כמה חלקי קוד, breaking component after component..
Architecture Goals:
Testable
Independence from Framework
Independent of UI
Independent of Databases, Libraries
Independent of any External Agency (Security, scheduling, etc)למעשה הכללים העסקיים שלך פשוט לא יודעים שום דבר על העולם החיצון, על הספריות, הפריימוורק, פלטפורם כזה או אחר, tools & drivers שמשתמשים בתוכנה, חבילות חיצוניות ועוד.
Core Layers מבודדים לחלוטין מהעולם החיצון.
ואז, כל שינוי גרסה בתלויות, או הפסקת תמיכה בפיצ’ר מסויים, או מעבר טכנולוגי כזה אחר, מצמצם את רמת ההשפעה שלו לשכבות העליונות בלבד, העוטפות את שכבות ה pure code – business rules.אצרף בתגובות את הלינקים לוידאו ולפוסט המלא בבלוג.
אשמח לשמוע את תובנותיכם.
Log in to reply.