המרשם

נתחיל מהבסיס, הנה הגדרה לא רשמית של 'רישום':

אבל:

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

מה קורה כשמתקשרים אל getPrimitive() באמצעות כינוי לערכת מפתחות? היא מעבירה את הקריאה ל-Registry1, שמכיל אובייקטים עם שיטות קונקרטיות ליצירת מפתחות ופרימיטיבים, כמו מפתח AesGcm או מכונה של ChunkedMac. המשימה של משרד הרישום היא להעביר את הקריאה לאובייקט הנכון. האפשרות פועלת רק אם האובייקט רשום, ולכן חשוב לרשום תמיד את הפרימיטיבים שבהם אתם מתכוונים להשתמש.

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

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

MacConfig.register()

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

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


  1. למופע הסינגלטון הגלובלי של רישום המחלקה, ליתר דיוק. אנחנו משתמשים לסירוגין בשם "Registry" עבור המחלקה וגם עבור ה-Singleton.