Validation Application Block with Strippers: ContainsCharctersValidator and Negated (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 - מתי היום-הולדת שלך?, יפורסם ב-19.7.2007
12. PropertyComparisonValidator ושני וולידטורים על אותו מאפיין - נבדוק שהמבקר נולד לפני שהוא ביקר במועדון, יפורסם ב-22.7.2007
13. RegexValidator - בודקים את הדוא"ל של המבקר , יפורסם ב-23.7.2007
14. DomainValidator - מה הסוג משקה אלכוהולי האהוב עלייך?, יפורסם ב-24.7.2007
15. ObjectValidator - מה המספר פלאפון שלך?, יפורסם ב-25.7.2007
16. ObjectCollectionValidator - מה המספרי פלאפון של החברים שלך?, יפורסם ב-26.7.2007
ContainsCharctersValidator ו-Negated - איך קוראים לך?
עכשיו שסיימנו לשמוע על הביקור של הלקוח במועדון החשפנות, נרצה לדעת קצת עליו.
נתחיל בשם המלא שלו. הכלליים העסקיים שלנו אומרים כי השם המלא של הלקוח אסור שיכיל אותיות מה-א"ב העברי בכלל.
סביר להניח שאנחנו מעבירים את השם לאיזה מיין-פריים בעייתי שיושב מאחורי הבר במועדון, אבל זה לא רלוונטי כרגע.
נשתמש ב-ContainsCharcterValidator כדי לבדוק את האותיות בשם הלקוח.
נרחיב את ההגדרה לרגע (למרות שהקוד הזה מספיק ורץ כמו טאטאלה) שיכיל ContainsCharcters.
המאפיין ContainsCharcters מפנה ל-Enum בעל אחד משתי אפשרויות: ContainsCharcters.Any ו-ContainsCharcters.All.
ContainsCharcters.Any הוא הברירת מחדל ומגדיר שהלוגיקה של הוולידטור הוא לחפש שהשם מכיל לפחות תו אחד מהתווים שסיפקנו.
ContainsCharacters.All משנה את הלוגיקה של הוולידטור שהמחרוזת חייבת להכיל את כל האותיות שסיפקנו.
אבל רגע, כרגע הוולידציה שלנו מחפשת אותיות עבריות בתוך השם ודורשת שתהיה לפחות אחת, אנחנו רוצים שאסור שתהיה אפילו אחת.
כלומר, אנחנו רוצים להפוך בדיוק את הלוגיקה של הוולידטור.
המאפיין Negated נמצא בכל וולידטור ומאפשר להפוך את הלוגיקה של הוולידטור.
כלומר, אם כאשר Negated=false הוולידציה מחפשת "לפחות אות א"ב אחת בשם הלקוח" עכשיו היא תחפש שלא יהיה "לפחות אות א"ב אחת בשם הלקוח".
נוכל לקבוע לכל וולידטור באשר הוא שהוא Negated ובכך להפוך את הלוגיקה שלו.
נראה איך היינו מוסיפים את הוולידטור דרך כלי הקונפיגיורציה ב-GUI.
ומולנו ה-XML שמתקבל בקובץ הקונפיוגרציה BL.config:
נבדוק ב-GUI שבאמת לא ניתן להזין אותיות בעברית.
למעשה בדוגמה הזו הפכנו לחלוטין את הלוגיקה של הוולידציה שהגיעה כברירת מחדל עם VAB.
נראה דוגמה מתוך ה-Unit tests לשימוש ב-ContainsCharcterValidator עם ContainsCharcters.All שהוא negated=false.
בשורה הראשונה יצרנו ContainsCharctersValidator שבודק אם מחרוזת מכילה בתוכה את האותיות b, c ו-a. כלומר, את כל שלושתן.
בשורה הבאה אנחנו בודקים את "asdfbc".
בשורה האחרונה אנחנו רואים ש-IsValid=true. כלומר, אכן "asdfbc" מכיל את שלושת האותיות "abc".