Validation Application Block with Strippers: ObjectCollectionValidator (Overview of all VAB Validators)
סדרת לומדים Validation Application Block עם חשפניות
1. קדם דבר: למה צריך וולידציה? (או: "קופים. פשוט קופים."), פורסם ב-26.6.2007
2. חלק ראשון: הפתרון הקיים והמצוי ב-Winforms, Console ו-ASP.Net (או: "איך קוראים לך ובת כמה את?"), פורסם ב-8.7.2007
3. חלק שני: שימוש ישיר ב-Validatorים של VAB (או: "איך לגרום לקוד יחסית קריא להפוך להיות ארוך ומעיק"), פורסם ב-9.7.2007
4. חלק שלישי: הכנסת נתוני הוולידטורים לתוך מחלקות (או: "ממלכתי עבור וולידטור ג'נארי"), פורסם ב-10.7.2007
5. חלק רביעי: אינטגרציה בסיסית עם ה-GUI ו-וולידציה מתוך קבצי קונפיוגרציה (או: "קצת יותר Drag&Drop, קצת פחות קוד"), פורסם ב-11.7.2007
6. חלק רביעי המשך: אינטגרציה בסיסית עם ה-GUI ו-וולידציה מתוך קבצי קונפיוגרציה (או: "קצת יותר Drag&Drop, קצת פחות קוד"), פורסם ב-12.7.2007
7. StringLengthValidator - בודקים שהכניסו שם חשפנית, פורסם ב-15.7.2007
8. RangeValidator - נו, תן ציון ל-Lap dance שקיבלת, פורסם ב-16.7.2007
9. DateTimeRangeValidator - מתי ביקרת אצלנו?, פורסם ב-17.7.2007
10. ContainsCharctersValidator ו-Negated - איך קוראים לך?, פורסם ב-18.7.2007
11. RelativeDateTimeValidator - מתי היום-הולדת שלך?, פורסם ב-22.7.2007
12. PropertyComparisonValidator ושני וולידטורים על אותו מאפיין - נבדוק שהמבקר נולד לפני שהוא ביקר במועדון, פורסם ב-24.7.2007
13. RegexValidator - בודקים את הדוא"ל של המבקר , פורסם ב-26.7.2007
14. DomainValidator - מה הסוג משקה אלכוהולי האהוב עלייך?, פורסם ב-29.7.2007
15. ObjectValidator - מה המספר פלאפון שלך?, פורסם ב-31.7.2007
16. ObjectCollectionValidator - מה המספרי פלאפון של החברים שלך?, פורסם ב-22.11.2007
ObjectCollectionValidator - מה המספרי פלאפון של החברים שלך?
התקבלה החלטה שניתן ללקוחות שלנו אפשרות למסור גם את המספרי פלאפון של החברים שלהם.
גם כדי לקדם את המועדון וגם כי הם יקבלו 10% הנחה בביקור הבא שלהם. כולם יוצאים עם רווח.
אבל אנחנו לא יודעים כמה מספרים ירצו הלקוחות למסור, יתכן שאחד, ייתכן ששניים, ייתכן ששלוש.
גם יש הבדלים בין ה-GUIים השונים. הוחלט שב-Winforms נאפשר למסור עד שני מספרים וב-ASP.Net עד שלושה מספרים.
מה נעשה בשביל זה? ניצור אוסף (גם באנגלית: Collection) שיכיל רשימה של פלאפונים השייכים לחברים.
נרצה איכשהו, שבדומה ל-ObjectValidator נוכל להריץ גם את כללי הוולידציה של CellPhone על FriendsCellPhones.
בדיוק בשביל צורך זה נכתב הוולידטור ObjectCollecitonValidator שמאפשר לנו להריץ את כללי הוולידציה של אוסף ישויות עסקיות.
ל-ObjectCollectionValidator ניתן את הטיפוס של שביחס אליו נרצה שכל האלמנטים באוסף יבדקו.
אם היינו רוצים להוסיף את ההגדרה של ObjectCollectionValidator דרך עורך הקונפיגיורציה הגרפי הינו עושים זאת כך.
בלחיצה על הכפתור השלוש נקודות (...) בתוך TargetType נוכל לבחור בצורה גרפית איזה מחלקה נרצה שעליה תתבצע הוולידציה של ה-ObjectCollectionValidator.
נראה איך ה-XML שקיבלנו בקובץ BL.config מהוספת ה-ObjectCollectionValidator:
ב-Winforms כנאמר נוסיף שלושה שדות:
נביט על המאפיינים של אחד מהם:
נוכל לראות שהוולידציה מתבצעת כנגד האוסף FriendsCellPhones שהוא מסוג <List<CellPhone.
זה בזמן שאנחנו מבצעים את הוולידציה על TextBox.Text שהוא מסוג string, ולכן נצטרך להמיר בין string ל-<List<CellPhone.
נתחבר לאירוע ה-ValueConvert ונבצע את ההמרה:
קיבלנו כאן מחרוזת כ-e.ValueToConvert ו"המרנו" אותה ל-<List<CellPhone שנכנס לתוך e.ConvertedValue.
בצורה דומה, ב-ASP.Net אנחנו גם מקבלים מחרוזת ורוצים לבצע וולידציה על <List<CellPhone.
נתחבר לאירוע ה-ValueConvert של שני ה-PropertyProxyValidators האלו ו"נמיר" מ-string ל-<List<CellPhone.
נראה את ה-ObjectCollectionValidator רץ ב-GUIים:
ובאמת רואים שהוולידציות הרלוונטיות מופעלות לכל אלמנט באוסף.
נחזור לדוגמת ה-FirstClass, SecondClass ו-ThirdClass ממוקדם.
נשנה את SecondClass.Third שיהיה אוסף מסוג <List<ThirdClas.
נרצה שכל וולידציה על SecondClass תגרור גם ווליציה על כל המחלקות ThirdClass בתוך Third.
נראה איך נוכל להשתמש במחלקות אלו כעת.
כרגיל נאתחל מופע של FirstClass ונדפיס את תוצאות הוולידציה שלו.
נוסיף גם מופיע אחד וולידי של ThirdClass ומופע אחד לא וולידי של ThirdClass.
ובהרצה נקבל באמת שיש שגיאות בוולידציה של FirstClass:
כלומר, למעשה VAB עובר אלמנט-אלמנט בתוך האוסף ובודק אם הוא וולידי לפי חוקי האימות שלו.