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

15 ביולי 2007


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 – מתי היום-הולדת שלך?, יפורסם ב-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


 


 


חלק חמישי: כל ה-Validatorים שמגיעים עם VAB (או: "איך היה הביקור שלך במועדון החשפנות שלנו?")


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


בתור התחלה, בואו נגדיר מה אנחנו מנסים לעשות:


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


image_thumb2_thumb_thumb1


 


ניצור טופס חדש באפליקציית ASP.Net שלנו וטופס חדש באפליקציית Winfroms שלנו.


image_thumb5_thumb_thumb1 


 


image_thumb7_thumb_thumb1


(מעצב גרפי או באונסר אני כבר לא אהיה)


 


נוסיף מחלקה חדשה לאפליקציה בשם BL.VisitingRating.




namespace BL


{


    public class VisitRating


    {


    }


}


 


StringLengthValidator – בודקים שהכניסו שם חשפנית


הבן-אדם כרגע עבר Lap dance, ברור שדבר ראשון שהוא שם לב הוא לתג שם של החשפנית.
אז נדאג באמת לקלוט את שם החשפנית. נתחיל כנקודת מוצא להוסיף את המאפיין הרלוונטי למחלקת VisitRating שלנו.




    public class VisitRating


    {


        private string _stripperName;


        public string StripperName


        {


            get { return _stripperName; }


            set { _stripperName = value; }


        }


    }


נדאג גם להוסיף שדה מתאים ל-ASP.Net עם PropertyProxyValidator.


image_thumb8_thumb_thumb1


image_thumb9_thumb_thumb1


ב-Winforms נדאג להוסיף שדה מתאים.


image_thumb10_thumb_thumb1


היות וזהו טופס חדש, נוסיף גם ValidationProvider עם ErrorProvider שמכוון על BL.VisitRating.


image_thumb14_thumb_thumb1


image_thumb13_thumb_thumb1


על שדה ה-TextBox נקבע כי הוא מבצע וולידציה לפי הכללים שנקבעו ב-VistingRating.StripperName.


image_thumb15_thumb_thumb1


בשלב זה, טיפלנו ב-GUI שלנו כך שיריץ כללי וולידציה על BL.VisitRating.StripperName.


ל-GUI אין מושג קלוש מה הוא בודק. הוא יכול לבדוק אם השם לא ריק, אם השם מתחרז עם המילה "פלטיפוס" או אם השם בא ממקור אסייתי.
ה-GUI רק יודע לשלוח נתונים ל-VAB ולקבל תוצאות בחזרה.
שימו לב, שבשלב זה, אפילו אנחנו לא יודעים מה הוולידציה שנרצה לעשות!


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


נבחר להוסיף StringLengthValidator על VisitRating.StripperName.




        private string _stripperName;


        [StringLengthValidator()]


        public string StripperName


        {


            get { return _stripperName; }


            set { _stripperName = value; }


        }


בואו נראה מה האפשרונות שלנו ל-StringLengthValidatorAttribute:


image_thumb_thumb1


מהסוף להתחלה:


1. נוכל לציין רק מספר יחיד והוא יהיה המקסימום תווים בתוך המחרוזת – לא מתאים לנו.


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


3. נוכל לציין שני מספרים ושני Enumים מוזרים מסוג RangeBoundryType. שני המספרים הם המינימום והמקסימום. בואו נביט על ה-RangeBoundryType הזה או מה שזה לא יהיה.


image_thumb1_thumb1


אפשרות אחת היא RangeBoundryType.Inclusive, כלומר "כולל" אותו גבול.
אפשרות נוספת היא RangeBoundryType.Exclusive, כומר "לא כולל" \ "עד" אותו גבול.
אפשרות אחרונה היא RangeBoundryType.Ignore, שאומר שכלל לא תתבצע וולידציה על גבול זה.


הגבול המינימלי שלנו מבחינת כמות תווים הוא 1 תו אחד (כולל).
הגבול המקסימלי שלנו מבחינת כמות תווים הוא RangeBoundryType.Ignore.





        private string _stripperName;


 


        [StringLengthValidator(1, RangeBoundaryType.Inclusive, 1000000, RangeBoundaryType.Ignore,


                               MessageTemplate = "Stripper name cannot be empty")]


        public string StripperName


        {


            get { return _stripperName; }


            set { _stripperName = value; }


        }


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


 


נראה איך ניתן להוסיף את ה-StringLengthValidator דרך הכלי הגרפי ואת ה-XML שהוא מייצר. (אם במקום הוספת ה-Attribute החלטנו להשתמש בקבצי קונפיוגרציה).


היות ועוד לא הוספנו את VisitRating לקובץ הקונפיוגרציה BL.config נוסיף אותו בפעם הראשונה.


image_thumb2_thumb6


image_thumb3_thumb1


 


image_thumb4_thumb1


image_thumb7_thumb6


נוסיף וולידציה מסוג StringLengthValidaor.


image_thumb9_thumb6


ונקבע לו את המאפיינים ונשמור שינויים.


image_thumb10_thumb6


והנה ה-XML שקיבלנו בקובץ הקונפיגיורציה BL.config.




    <type defaultRuleset="default" assemblyName="BL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"


      name="BL.VisitRating">


      <ruleset name="default">


        <properties>


          <property name="StripperName">


            <validator lowerBound="1" lowerBoundType="Inclusive"


              upperBound="0" upperBoundType="Ignore"


              messageTemplate="Stripper name cannot be empty"


              messageTemplateResourceName="" messageTemplateResourceType=""


              tag="" negated="false"


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


              name="String Length Validator" />


          </property>


        </properties>


      </ruleset>


    </type>


נריץ את האפליקציות שלנו ונוכל לראות שלא משנה אם בחרנו ב-Attributes או\ו קונפיגיורציה באמת נקבל שגיאה כאשר לא נכתוב שם חשפנית.


image_thumb13_thumb6


image_thumb11_thumb1


הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. (*) שדות חובה מסומנים