דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. הבנת solid וclean code

הבנת solid וclean code

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 18 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • E מחובר
    E מחובר
    eido
    כתב נערך לאחרונה על ידי eido
    #1

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

    export const deleteAd = async (knex, adId) =>  !!(await knex('ads').where({ id: adId }).del());
    
    

    או להוספה

    export async function insertAd(knex, data) {
      const [id] = await knex('ads').insert(data);
      return id;
    }
    

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

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

    dovidD תגובה 1 תגובה אחרונה
    0
    • E eido

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

      export const deleteAd = async (knex, adId) =>  !!(await knex('ads').where({ id: adId }).del());
      
      

      או להוספה

      export async function insertAd(knex, data) {
        const [id] = await knex('ads').insert(data);
        return id;
      }
      

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

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

      dovidD מחובר
      dovidD מחובר
      dovid
      ניהול
      כתב נערך לאחרונה על ידי dovid
      #2

      @eido

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

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

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

      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      תגובה 1 תגובה אחרונה
      1
      תגובה
      • תגובה כנושא
      התחברו כדי לפרסם תגובה
      • מהישן לחדש
      • מהחדש לישן
      • הכי הרבה הצבעות


      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום