DCSIMG
Validation Application Block with Strippers: PropertyComparisonValidator (Overview of all VAB Validators) - Justin myJustin = new Justin( Expriences.Current );

Validation Application Block with Strippers: PropertyComparisonValidator (Overview of all VAB Validators)

image

סדרת לומדים 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 - בודקים את הדוא"ל של המבקר , יפורסם ב-25.7.2007

14. DomainValidator - מה הסוג משקה אלכוהולי האהוב עלייך?, יפורסם ב-26.7.2007

15. ObjectValidator - מה המספר פלאפון שלך?, יפורסם ב-29.7.2007

16. ObjectCollectionValidator - מה המספרי פלאפון של החברים שלך?, יפורסם ב-30.7.2007

 

 

PropertyComparisonValidator ושני וולידטורים על אותו מאפיין - נבדוק שהמבקר נולד לפני שהוא ביקר במועדון

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

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

נוסיף PropertyComparisonValidator ל-BirthDate.

image_thumb63_thumb1

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

נפרט ל-PropertyComparisonValidator שאנחנו רוצים להשוות את התאריך לידה לתאריך ביקור

        private DateTime _birthDate;

        [RelativeDateTimeValidator(0, DateTimeUnit.None, RangeBoundaryType.Ignore,

                                   -18, DateTimeUnit.Year, RangeBoundaryType.Inclusive,

                                   MessageTemplate = "You must be 18 years old or older")]

        [PropertyComparisonValidator("VisitDate")]

        public DateTime BirthDate

        {

            get { return _birthDate; }

            set { _birthDate = value; }

        }

עכשיו נצטרך לפרט מה היחס שנרצה בין BirthDate ל-VisitDate ואת היחס הזה נפרט באמצעות ComparisonOpearator.

image_thumb64_thumb1

נקבע שההשוואה בין תאריך לידה לתאריך ביקור היא כך שתאריך לידה קטן מתאריך ביקור.

        private DateTime _birthDate;

        [RelativeDateTimeValidator(0, DateTimeUnit.None, RangeBoundaryType.Ignore,

                                   -18, DateTimeUnit.Year, RangeBoundaryType.Inclusive,

                                   MessageTemplate = "You must be 18 years old or older")]

        [PropertyComparisonValidator("VisitDate", ComparisonOperator.LessThan,

                                    MessageTemplate="Ahmm.. Ahmm..")]

        public DateTime BirthDate

        {

            get { return _birthDate; }

            set { _birthDate = value; }

        }

נראה איך היינו מגדירים את הוולידטור דרך כלי הקונפיוגרציה הגרפי.

image_thumb711_thumb1

image_thumb72_thumb1

נראה את ה-XML שהעריכה הגרפית יוצרת בקובץ BL.config:

          <property name="BirthDate">

            <validator lowerUnit="None" upperUnit="Year" lowerBound="0" lowerBoundType="Ignore"

              upperBound="-18" upperBoundType="Inclusive" negated="false"

              messageTemplate="You must be 18 years old or older" messageTemplateResourceName=""

              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RelativeDateTimeValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

              name="Relative Date Time Validator" />

            <validator operator="LessThan" propertyToCompare="VisitDate"

              negated="false" messageTemplate="" messageTemplateResourceName=""

              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.PropertyComparisonValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

              name="Property Comparison Validator" />

          </property>

שימו לב, יש לנו אלמנט <property> אחד עם כמה אלמנטי <validator> שנצטרך.

נבדוק שבאמת מתבצעת וולידציה ב-GUI:

image_thumb66_thumb1

image_thumb70_thumb1

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

בנוסף לקוד הוולידציה הקיים של תאריך לידה :

        private DateTime _birthDate;

        [RelativeDateTimeValidator(0, DateTimeUnit.None, RangeBoundaryType.Ignore,

                                   -18, DateTimeUnit.Year, RangeBoundaryType.Inclusive,

                                   MessageTemplate = "You must be 18 years old or older")]

        [PropertyComparisonValidator("VisitDate", ComparisonOperator.LessThan,

                                    MessageTemplate="Ahmm.. Ahmm..")]

        public DateTime BirthDate

        {

            get { return _birthDate; }

            set { _birthDate = value; }

        }

נוכל להוסיף קוד וולידציה על תאריך ביקור:

        private DateTime _visitDate;

        [DateTimeRangeValidator("2010-01-01T00:00:00",

                               MessageTemplate = "Visit date has to be before 1/1/2010")]

        [PropertyComparisonValidator("BirthDate", ComparisonOperator.GreaterThan,

                            MessageTemplate = "Ahmm.. Ahmm..")]

        public DateTime VisitDate

        {

            get { return _visitDate; }

            set { _visitDate = value; }

        }

נוכל לבחור לאיזה מהמאפיינים נרצה להוסיף את ה-PropertyComparisonValidator או אפילו לשניהם.

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

Comments

No Comments