PracticU

יצירת מאפיין וולידציה
Custom Validator

בלי כתוביותעם כתוביות
PracticU › קורס דוט-נט - NET Core. - עם Rest API › יצירת מאפיין וולידציה Custom Validator
יצירת מאפיין וולידציה Custom Validator
כשאף אחד מה-attributes הקיימים ב-data annotation לא בודק את מה שאתם צריכים, אפשר לבנות attribute משלכם. הדוגמה כאן: איסור על שני רווחים רצופים בטקסט.
בניית ה-Custom Validator
1. המחלקה: מחלקה בשם ExtraSpacingForbiddenAttribute שיורשת מ-ValidationAttribute, כמו כל ה-validators הקיימים. אפשר לשים אותה בתיקיית המודלים, או בתיקייה נפרדת. המילה Attribute בסוף אופציונלית בשימוש.
2. override ל-IsValid: בוחרים בגרסה שמקבלת גם את ה-value וגם ValidationContext. ה-value הוא מה שמנסים להכניס למאפיין שמעליו ה-validator.
3. null הוא תקין: אם ה-value שווה null מחזירים ValidationResult.Success. ה-validator הזה אינו required, ואם title אינו שדה חובה, אסור שה-validator יכשיל כשלא הוזן ערך. לכן המאפיין מוגדר string?.
4. הבדיקה: value.ToString() (עם סימן קריאה כי null כבר טופל), ואז בודקים אם הטקסט Contains שני רווחים (או יותר).
5. ההודעה: מחזירים ValidationResult עם השם של המאפיין מ-validationContext.MemberName, והטקסט "contains multiple space sequence". אחרת מחזירים Success.
6. שימוש: כותבים [ExtraSpacingForbidden] מעל title ומעל description.
בדיקה
ספר חוקי נוסף. title עם שני רווחים החזיר "title contains multiple space sequence", ו-description עם שלושה רווחים החזיר "description contains multiple space sequence", כשיוזר מחזיר 400.
שימו לב
regular expression יכול לעשות את אותה בדיקה, ופה הוא נבחר רק כדי להדגים custom validator. היתרון של ה-attribute שנבנה: אפשר להשתמש בו בכל מקום, ואולי אפילו על כל string, ולחסוך בדיקות חוזרות.
אחרי הסרטון תוכלו לכתוב validator משלכם, ולהוסיף אותו כ-attribute לכל מאפיין במודל.
השיעור הבא בקורס: וולידציה למספר מאפיינים יחד
מילון מושגים:
מאפיין – תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
מחלקה – תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
תיקייה – מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
מחרוזת – סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
מודל – רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה; גם ייצוג מופשט של מערכת או תהליך.

פרקי ההרצאה: יצירת מאפיין וולידציה Custom Validator

  1. 00:00

    ה-attributes של data annotation

  2. 00:42

    בניית custom attribute משלנו

  3. 01:19

    ירושה מ-ValidationAttribute

  4. 02:15

    דריסת הפונקציה IsValid

תמלול ההרצאה: יצירת מאפיין וולידציה Custom Validator

הטקסט המלא של הדקות הראשונות בהרצאה «יצירת מאפיין וולידציה Custom Validator» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    כל ה-attributes האלה שראינו זה בעצם attributes שקיימים ב-data annotation namespace וכל אחד בודק משהו ספציפי required בודק שאכן יש לנו כאן ערך maximum length בודק שהערך הזה לא ארוך מדי לפי מה שהגדרנו כאן.

  2. 00:22

    אבל מה קורה אם אנחנו רוצים לבצע איזושהי בדיקה שבאמת לא קיימת ואני לא יכול להשיג אותה בשום אפשרות אחרת? ואני רוצה לעשות לבדוק ש-title או ש-description יש להם איזה משהו ספציפי ואין לי את המענה מה-attributes הקיימים.

  3. 00:38

    אז מה שאפשר לעשות זה custom attribute משלנו, שאחר כך אנחנו משתמשים איתו כאילו שהוא attribute רגיל במערכת. בואו נבנה לעצמנו אחד כזה. בואו נלך רגע לרשימת המודלים.

  4. 00:52

    אפשר כמובן לשים אותו באיזו תיקייה משלו של errors אולי, או validations או משהו כזה, אבל בגלל שאין לנו פה כל כך הרבה תיקיות זה בסדר, פשוט לשים אותו כרגע במודל. אז בואו נפתח מחלקה חדשה, נגדיר מחלקה חדשה ונבנה valiדator שנקרא extraSpacingForbidden Attribute, כי זה מחלקת attribute.

  5. 01:19

    אפשר גם בלי המילה attribute זה אותו הדבר. בואו ניפטר מהזנב הזה, ומה שאנחנו רוצים לעשות זה לרשת ValidationAttribute. כל אחד מה-validatoren שראינו מקודם, ה-attributes האלה, יורשים מזה ואנחנו בונים גם אחד שיורש מזה.

  6. 01:38

    מה אנחנו בעצם בודקים? שלא חוקי שיהיה יותר מ-space אחד בכל מקום במחרוזת עצמה למעשה. עכשיו בינינו regular expression גם יודע לעשות את זה.

  7. 01:51

    אנחנו יכולנו לכתוב פה איזשהו regular expression שיודע לבדוק האם יש לי extra spacing. הכוונה נניח שה-title של הספר זה לא C++ רווח, רווח בטעות for beginners.

  8. 02:08

    נניח אני לא רוצה שיהיה פה שני רווחים אלא שיהיה רק רווח אחד. אז כמובן ש-regular expression יודע לעשות את זה, אבל נניח שאנחנו רוצים לראות איך עושים את זה בעזרת custom validator.

  9. 02:20

    אז בנינו custom validator מיוחד בשבילנו ואנחנו רוצים to override את הפונקציה IsValid. יש לנו שתי פונקציות, אחת שפשוט מקבלת רק את אותו אובייקט שאנחנו רוצים לבדוק, את אותו value שאנחנו רוצים לבדוק.

  10. 02:36

    מה זה ה-value שאנחנו רוצים לבדוק? אותו משתנה שנשים את ה-validator מעליו. אם הייתי שם את ה-extra spacing הזה כאן אז ה-value היה מה שמנסים להכניס ל-title, ואם הייתי שם אותו פה, תכף נשים אותם, אז ה-value היה מה שמנסים להכניס ל-description.

  11. 02:54

    אז יש לי פה אפשרות ל-IsValid ולקבל את ה-value או IsValid ולקבל גם את ה-value וגם

לקורס המלא: קורס דוט-נט - NET Core. - עם Rest API

ההרצאה הקודמת: הוצאת הודעות השגיאה - מתוך ModelState

ההרצאה הבאה: וולידציה למספר מאפיינים יחד

הרצאות קשורות מקורסים אחרים

  • Angular4 - Validator Pattern
  • Custom Toast
  • הסבר על Custom Dialogs
  • בניית Custom React Hook

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio