אנא אפשר JavaScript כדי להשתמש בתכונות הנגישות תכונות נגישות של אתרים על ידי UserWay
top of page

SOLID Design Principle with Python : Single Responsibility Principle | SRP

Nissim Elaluf

עודכן: 24 בפבר׳ 2024




שלום חברים שבוע טוב

חלק ניכר מאנשי הDATA משתמשים בפייתון ביום יום

אם זה על מנת לבצע טרנספורמציות בתהליכי ה ETL (למי ששכח מצ”ב לינק), אם זה בכדי לבצע אוטומציות לפעולות אחרות בתהליך ליצירת DWH וארכיטקטורה אידיאלית לנתונים שמגיעים ממקורות שונים



היום אני רוצה להתחיל סדרה קצרצרה על עקרונות בסיס בתכנות ובצורה יותר פרקטית לפייתון

היום נדבר על עקרונות הSOLID.

SOLID זה בעצם ראשי תיבות באנגלית של :



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



אוקי נתחיל:

האות הראשונה היא S ומסמלת את העקרון הראשון שהוא Single Responsibility Principle | SRP

כל Module שאנחנו כותבים צריך להיות מיועד למטרה ספציפית אחת,

איך נוודא את זה ? כשנשאל האם יש יותר מסיבה אחת להשתנות ? והתשובה תהיה לא!

רגע רגע רגע !

אנחנו מכירים Classים אנחנו מכירים OOP

אבל מה המשמעות של Module בתכנות שלנו בפייתון?

אוקי אז בשביל לעשות את זה כמה שיותר פשוט – Module הכוונה Class או כל פונקצייה או מתודה שכתבנו.

סבבה זה ברור

אבל מה בכלל זה אומר “סיבה אחת להשתנות” ?

טוב בואו נבין את זה ונחזור רגע לבסיס 😊

אנחנו יודעים שכל מחלקה או מתודה שאנחנו כותבים תקבע מה ייקרה באפליקציה או בתוכנה שלנו ואיך זה יקרה.

המטרה שלנו היא לעשות הפרדה בצורת כתיבה שלנו ולהפריד בין מחלקות ומתודות שכתבנו שתפקידן לדאוג ל: מה לבין אלו שתפקידן לנהל את האיך.



sekhar srinivas

 ככה יהיה לנו מאוד קל להבין מה עושה על Module ויהיה לנו אפילו קל עוד יותר לעדכן לשנות או לבדוק את הקוד שלנו תוך כדי הפיתוח.

בואו נבין רגע

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

לדוגמה תדמיינו אולר עם כל כך הרבה אפשרויות שימוש

מעבר לעובדה שכנראה כל אחד מהפתרונות שנוא מציע לא יהיו אידיאליים לפתרון (לא תלכו להוריד עץ עם המסור שלו ולא תנסו לעשות באמת שיוף לציפורניים) ובנוסף אם עכשיו נתקע משו באחד הכלי זה משפיע על התפקוד של כל היתר.





טוב בשביל לוודא הבנה ויכולת לישום בהמשך של העיקרון הראשון Single Responsibility Principle | SRP

בואו ניקח דרישה וננסה לענות עליה בצורה אידיאלית

אנו צריכים לבנות פתרון של הרשמה של משתמשים

  1. כאשר הנתונים והמידע של המשתמשים יישמר בDB בSQL

  2. אם יש שגיאה אנו רוצים לכתוב אותה כמובן לLOG שגיאות בDB.

  3. ואנו רוצים לשלוח אימייל למשתמש החדש שמודיע על הצלחת תהליך ההרשמה שלו.

אוקי אלו דברים שכולנו מכירים מהיום יום בכל אתר או שירות שאנו נרשמים אליו

טוב אז בואו נתחיל בלכתוב Class בשם UserRegistration  עם 3 מתודות כמובן לכל אחת מהצרכים שלנו



sekhar srinivas

אם נכתוב את המחלקה ככה זה יעבוד או לא ?

למען האמת היא תעבוד מעולה אך לא על פי העקרון שלמדנו עכשיו

בעצם הפתרון הזה מבצע 3 משימות שונות ולכן לא עומד בתנאי של SRP.

הפתרון הנכון הוא לכתוב 3 Classים שונים שיבצעו כל אחת מהן משימה אחת ברורה.

כמובן בקבצים שונים



טוב

אני מוכרח לציין שיש המון אנשים שחושבים שאם נרכז הכל במקום אחד דווקה יהיה לנו יותר קל לתחזק או להבין את הקוד, אבל צריך להבין איזה דבר “מה אם…”

מה אם עכשיו יבקשו לשנות את הפרקטיקה או יוסיפו דרישות לדרישות הקיימות ?

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

תמיד צריך לחשוב על הדרישות ומה קורה במידה והן משתנות.

בואו נסכם את היתרונות ב Single Responsibility Principle | SRP

  • תחזוקה פשוטה יותר.

  • בדיקות אפקטיביות יותר.

  • גמישות בשינויים ותוספות שתמיד יגיעו.

  • פיתוח מקבילי  של צוות מפתחים תמיד יהיה אפקטיבי יותר בצורה הזו.

Comentarios


bottom of page