שכבת נתונים

מחלקה ציבורית DataLayer

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

   {
     title: "Original screen title"
   }
כשהמצב/הנתונים של אפליקציה יכולים להשתנות, האפליקציה יכולה לעדכן את ה-dataLayer באמצעות קריאה כמו:
   dataLayer.push(DataLayer.mapOf("title", "New screen title"));
עכשיו שכבת הנתונים מכילה:
   {
     title: "New screen title"
   }
אחרי דחיפה נוספת:
 dataLayer.push(DataLayer.mapOf("xyz", 3));
ה-dataLayer מכיל:
   {
     "title": "New screen title",
     "xyz": 3
   }
הדוגמה הבאה ממחישה איך פועל מיזוג של מערכים ומפה. אם ה-dataLayer המקורי מכיל:
   {
     "items": ["item1", null, "item2", {"a": "aValue", "b": "bValue"}]
   }
אחרי הדחיפה הזו:
 dataLayer.push("items", DataLayer.listOf(null, "item6", DataLayer.OBJECT_NOT_PRESENT,
     DataLayer.mapOf("a", null)));
ה-dataLayer מכיל:
   {
     "items": [null, "item6", "item2", {"a": null, "b": "bValue"}]
   }

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

בעת דחיפת מפתח event לשכבת הנתונים, מתבצעת הערכה של הכללים לתגים וכל התגים שתואמים לאירוע הזה יופעלו. לדוגמה, בהינתן מאגר עם תג שכלל ההפעלה שלו הוא "event" שווה ל-"openScreen", אחרי הדחיפה הזו:

 dataLayer.push("event", "openScreen");
התג הזה יופעל.

סיכום השדה

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

סיכום אמצעי תשלום ציבורי

אובייקט
get(מפתח מחרוזת)
סטטית רשימה<Object>
listOf(אובייקט... אובייקטים)
סטטי מפה<Object, Object>
mapOf(אובייקט... אובייקטים)
void
push(מפה<Object, אובייקט> עדכון)
void
push(אובייקט מפתח, ערך אובייקט)

שדות

ציבורי סטטי סופי אובייקט OBJECT_NOT_PRESENT

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

שיטות ציבוריות

Public אובייקט get (מחרוזת מפתח)

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

במפתח יכולות להיות נקודות מוטמעות. לדוגמה: מפתח של "a.b.c" מחזיר מפה עם המפתח "c" במפה עם המפתח "b" במפה עם המפתח "a" במודל.

Public סטטי רשימה<Object> listOf (אובייקט... אובייקטים)

שיטת עזר שיוצרת רשימה.

לדוגמה, פעולה זו תיצור רשימה שכוללת את השדות "object1" ו-"object2":

   List<Object> list = DataLayer.listOf("object1", "object2");
 

Public סטטי Map<Object, Object> mapOf (Object... אובייקטים)

שיטת עזר ליצירת מפה. הפרמטרים צריכים להיות זוגות של ערכי מפתח.

לדוגמה, באופן הבא נוצר מיפוי המפה של "key1" אל "value1" ושל "key2" ל-"value2":

   Map<Object, Object> map = DataLayer.mapOf("key1", "value1", "key2", "value2");
 

קליעות
IllegalArgumentException אם יש מספר אי-זוגי של פרמטרים

ציבורי בטל push (מפה<Object, Object> עדכון)

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

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

אם יש דחיפה של שרשור אחר, השיחה הזו תיחסם עד שהשרשור יסתיים.

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

אם השדה update מכיל את המפתח event, הכללים ייבדקו והתגים התואמים יופעלו.

פרמטרים
update את אובייקט העדכון לעיבוד

Public void push (אובייקט מפתח, אובייקט ערך)

דוחפת צמד מפתח/ערך של נתונים לשכבת הנתונים. זו רק שיטת נוחות שנקראת push(DataLayer.mapOf(key, value)).