Dart භාෂාවේ වැඩ කරන වැඩිහිටියන්ට හුරුපුරුදු වුණාම, Schema.string() වගේ factory method එකක් භාවිතා කරලා regex, enum වැනි පිරික්සුම් කරනවා. මේ පිරික්සුම් මඟින් වැරදි අගයක් ඇතුළත් වුනාම තත්ක්ෂණිකව FormatException හෝ ArgumentError දැනගත හැකිවෙයි.
ඇත්ත වශයෙන්ම, instructor_dart පැකේජය මෙම factory method මත පදනම්ව schema එකක් නිර්මාණය කරයි. Schema.string(pattern: r'^[^@]+@[^@]+$') කියලා pattern එකක් දෙන්නේ regex එකේ හැකියාව පරීක්ෂා කරලා, Schema.enumeration(['low','medium','high']) කියලා empty list එකක් නොලැබෙන්නත් පරීක්ෂා කරලා පසු, නිවැරදි Schema object එකක් ලබා දෙයි.
කෙසේ වෙතත්, 0.4.0 අනුවාදයට පෙර, එම concrete class (StringSchema, EnumSchema වැනි) වලට public const constructors තිබුණා. ඒ නිසා StringSchema(pattern: '(') වගේ එකක් හරහා factory validation එකක් නොගැනී, වැරදි regex එකක් object එකේ ඇතුළත් වුනා. const constructor එකක් තුළ assert පමණක් භාවිතා කළ හැකි නිසා, release build එකේ ඒවා ඉවත් වෙයි, සහ RegExp පරික්ෂා කිරීමක් const context එකේ කළ නොහැක. එවිට වැරදි පරික්ෂාවක් අතුරුදන්වී, runtime එකේ අමුතු stack trace එකක් පෙන්වයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
- සිසුන් – Dart හි const constructor වල සීමා තේරුම් ගනිමින්, නිවැරදි validation pattern එකක් තෝරා ගැනීමට ඉගෙන ගත හැකිය.
- ඩෙවලපර් – Factory method සහ constructor අතර වෙනස හඳුනාගෙන, ආරක්ෂිත API design ක්රමවේදයන් අනුගමනය කළ හැක.
- ව්යාපාර – නිෂ්පාදන කේතයේ hidden bugs අඩු කර, LLM‑based සේවා (OpenAI, Anthropic, Gemini) වලින් ලබා ගන්නා data validation වඩා ශක්තිමත් වේ.
අවසන් වශයෙන්, instructor_dart පැකේජය 0.4.0 පසු පසු const constructors ගුප්ත (private) කරමින්, factory validation එකට පසුබිමක් නොතබා, developers ලාට ආරක්ෂිත පදනමක් ලබා දී ඇත. ඔබත් ඔබේ පෞද්ගලික ලයිබ්රරියෙහි මෙවැනි දෙයක් පරීක්ෂා කර, අනාගතයේ ඇති විය හැකි බග්ස් වලින් මුදලට ඉවත් වෙන්න.