שכבת הנתונים היא מפה שמכילה מידע גנרי על האפליקציה. המערכת משתמשת בקבוצה סטנדרטית של מפתחות, כך שכל גורם שמבין את המפרט יכול לקרוא אותה. המצב של שכבת הנתונים מתעדכן באמצעות ה-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 |
שדות
ציבורי סטטי סופי אובייקט 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))
.