🔥Fluent Validation
✅پکیج Fluent Validation یه پکیج محبوب توی سی شارپ هست که برای input validation استفاده میشه و امکانات زیادی داره.
🔥داشتم دنبال چنین چیزی توی دارت میگشتم که یه پکیج با اسم مشابه پیدا کردم که به طور کامل از نمونه ی سی شارپش الهام گرفته.
https://pub.dev/packages/fluent_validation
✅یه جاهایی با نمونه ی سی شارپ متفاوته که فک میکنم بخاطر غیرفعال بودن رفلکشن توی دارت این مورد پیش اومده. ولی خب اون قدر مهم نیست.
@purecoder_ir
✅پکیج Fluent Validation یه پکیج محبوب توی سی شارپ هست که برای input validation استفاده میشه و امکانات زیادی داره.
🔥داشتم دنبال چنین چیزی توی دارت میگشتم که یه پکیج با اسم مشابه پیدا کردم که به طور کامل از نمونه ی سی شارپش الهام گرفته.
https://pub.dev/packages/fluent_validation
class UserValidator extends AbstractValidator<User> {
UserValidator() {
ruleFor((user) => user.age, key: 'age').isNotNull().greaterThanOrEqual(13);
ruleFor((user) => user.name, key: 'name').isNotEmpty();
}
}
// Later on
final UserValidator validator = UserValidator();
ValidationResult result = validator.validate(user);
result.errors.first.key == 'The key of the rule that errored (for example age)'
result.errors.first.iss.onessage == 'The supplied error message (Passed by you, or default)'
result.errors.first.code == 'The error code'✅یه جاهایی با نمونه ی سی شارپ متفاوته که فک میکنم بخاطر غیرفعال بودن رفلکشن توی دارت این مورد پیش اومده. ولی خب اون قدر مهم نیست.
@purecoder_ir
🔥12
واقعن هیچ شرکتی کار درست تر از Jet Brains نیست...
این یه دونه رو بذارید متعصب باشیم😂😂
این یه دونه رو بذارید متعصب باشیم😂😂
👍13🔥4👎2
🍁وقتی که توی یه web cotroller همه دپندسی ها رو به کانستراکتور inject میکنیم، همه چیز خوشکل و گوگولی به نظر میاد. ولی ممکنه بعضی از action ها از بعضی دپندنسی ها استفاده نکنن.
👈برای مثال توی کلاس CustomersController چند تا متد زیر رو داشته باشیم:
✔️Search
✔️GetById
✔️Add
✔️EditPersonalInfo
✔️Remove
دپندنسی هایی که هر کدوم از این اکشن متد ها نیاز دارن ممکنه متفاوت باشه.
❓حالا اگه همه دپندنسی ها رو به کانستراکتور inject کنیم چه اتفاقی میوفته؟
فرض میکنیم دپندسی ها scoped یا Transient باشن...
😱هر بار که یه رکوئست جدید میاد یه نمونه ی جدید از کنترلر با تمام دپندسی هاش ساخته میشه، در حالیکه بعضی از اون دپندسی ها مورد استفاده ی اون اکشن متدی که قراره رکوئست رو هندل کنه قرار نمیگیرن.
😱😱حالا خود اون دپندسی ها هم هر کدومشون ممکنه چنتا دپندسی دیگه داشته باشن!!!
پس توی هر رکوئست چندین تا دپندنسی ساخته میشه که اصلن به کار نمیان!!!
🙄پرفرمنس رو دریاب نه خوشکلی!!!
❓راه حل چیه؟
✅اینجاست که inject کردن دپندسی ها به متد به جای کانستراکتور راه حل بهتریه.
🔥اون دپندسی هایی که توسط همه ی متد ها استفاده میشن رو به کانستراکتور inject میکنیم و اونهایی که فقط توسط یه متد خاص استفاده میشن رو به همون متد...
هدف کد هم مشخص تر میشه.
به هر حال web cotroller ها کلاس هایی نیستن که خیلی single responsibility داشته باشن.
👈البته فریمورکی که استفاده میکنی باید این رو پشتیبانی کنه.
👈برای مثال توی کلاس CustomersController چند تا متد زیر رو داشته باشیم:
✔️Search
✔️GetById
✔️Add
✔️EditPersonalInfo
✔️Remove
دپندنسی هایی که هر کدوم از این اکشن متد ها نیاز دارن ممکنه متفاوت باشه.
❓حالا اگه همه دپندنسی ها رو به کانستراکتور inject کنیم چه اتفاقی میوفته؟
فرض میکنیم دپندسی ها scoped یا Transient باشن...
😱هر بار که یه رکوئست جدید میاد یه نمونه ی جدید از کنترلر با تمام دپندسی هاش ساخته میشه، در حالیکه بعضی از اون دپندسی ها مورد استفاده ی اون اکشن متدی که قراره رکوئست رو هندل کنه قرار نمیگیرن.
😱😱حالا خود اون دپندسی ها هم هر کدومشون ممکنه چنتا دپندسی دیگه داشته باشن!!!
پس توی هر رکوئست چندین تا دپندنسی ساخته میشه که اصلن به کار نمیان!!!
🙄پرفرمنس رو دریاب نه خوشکلی!!!
❓راه حل چیه؟
✅اینجاست که inject کردن دپندسی ها به متد به جای کانستراکتور راه حل بهتریه.
🔥اون دپندسی هایی که توسط همه ی متد ها استفاده میشن رو به کانستراکتور inject میکنیم و اونهایی که فقط توسط یه متد خاص استفاده میشن رو به همون متد...
هدف کد هم مشخص تر میشه.
به هر حال web cotroller ها کلاس هایی نیستن که خیلی single responsibility داشته باشن.
👈البته فریمورکی که استفاده میکنی باید این رو پشتیبانی کنه.
@purecoder_ir
🔥5❤2