تا چه میزان کلیدهای خارجی باید در لایه Application بررسی شوند؟
وضعیت: پاسخ داده شده

سلام

زمانی که کاربر یک درخواست از نوع POST را به API ارسال میکنه، نتیجه انجام عملیات در متغیری با نام IsSuccess برگردانده میشه. اگر مقدار این متغیر برابر false باشه یعنی متغیر ErrorList حاوی پیغام است.

سناریو:

  • نام Entity در این مثال Product هست که پنج Navigation Property داره که با Entityهای دیگر دارای Relation هستند.
  • لایه Application قبل از اینکه در Entity یک ردیف جدید ثبت کنه ابتدا با دستور Any مقدار یکی از Propertyها را بررسی میکنه و اگر وجود نداشت، یک Error در ErrorList اضافه میکنه و نتیجه را بصورت IsSeccess=false بر میگردونه.
  • در واقع حالا کاربر مطلع هست که مثلا ProductTypeId اشتباه است و اصلا ProductTypeی با این شناسه وجود نداره.

سوال:

  1. آیا ضروریه تا به ازای هر کلید خارجی که در Entity تعریف شده بدین صورت اعتبار تمام آنها بررسی و به کلاینت اعلام شود؟
  2. اگر تعداد کلیدهای خارجی در یک Entity زیاد باشد راه حل چیست؟
  3. آیا اگر اطلاعات را مستقیما به بانک اطلاعاتی ارسال کنیم تا خود بانک اطلاعاتی صحت وجود این کلیدها را بررسی کند بهتر است یا خیر؟
  4. اگر برعهده بانک اطلاعاتی بگذاریم چطور باید به کلاینت و به ازای هر کلید خارجی که باعث بروز Exception شده اطلاع رسانی کنیم؟
  5. در مجموع روش مناسب کدام است؟

تشکر

  • #
    ‫۱ ماه قبل، چهارشنبه ۱۷ مرداد ۱۴۰۳، ساعت ۰۷:۳۸

    مزیت وجود این همه فریم‌ورک‌های اعتبارسنجی، عدم واگذاری یکسری از کارها به خود بانک اطلاعاتی است؛ وگرنه، بله. اتفاقا خود بانک اطلاعاتی به خوبی می‌تواند (یکسری از قیود «ابتدایی» تعریف شده‌ی در آن‌را و نه ... بررسی‌های پیچیده‌ی ممکن توسط فریم‌ورک‌های اعتبارسنجی را) اعتبارسنجی کند و درخواست‌های insert/update/delete را راسا خاتمه داده و برگشت بزند. البته ... در نهایت با پیام‌هایی غیرکاربرپسند و به همراه استثناءهایی که هزینه‌ها و سربارهایی را به سیستم تحمیل می‌کنند. به همین جهت ترجیح داده می‌شود که برای بررسی‌های پیچیده‌تر و همچنین نمایش پیام‌های کاربرپسندتری، پیش از ارسال اطلاعات به بانک اطلاعاتی، اعتبارسنجی‌های پیچیده در سمت برنامه انجام شوند.

    • #
      ‫۱ ماه قبل، چهارشنبه ۱۷ مرداد ۱۴۰۳، ساعت ۱۰:۴۴

      آنچه که در خصوص کتابخانه های مخصوص اعتبارسنجی فرمودید آیا با ارجاع به بانک اطلاعاتی هم پیاده سازی میشوند؟ چون مفهوم اعتبارسنجی را در سطح کلاس های برنامه بلد هستم. برای سناریوی عنوان شده در پست اولیه، یک لایه اعتبارسنجی توسط FluentValidation پیاده سازی شده و null بودن کلیدها بررسی می شوند ولی وجود چنین شناسه ای به عنوان کلید اصلی در بانک اطلاعاتی چطور باید بررسی شود؟ آیا با همان FluentValidation امکانپذیر است یا اینکه در همان لایه Application باید تمام کلیدها بررسی و پیغام مناسب به کاربر برگردانده شود؟

      • #
        ‫۱ ماه قبل، چهارشنبه ۱۷ مرداد ۱۴۰۳، ساعت ۱۱:۰۰

        یک مثال در این مورد جهت نمایش نحوه‌ی کار با سرویس‌ها در حین پیاده سازی اعتبارسنج‌ها