۶ اشتباه در Controller های asp.net

Map کردن DTO ها

چون اولین نقطه ای که درخواست های وب بهش میرسه Action هامون هستن ، به همین خاطر گاها اشتباه پیش میاد که پر کردن اطلاعات DTO ها رو همونجا انجام میدیم

مثال زیر رو در نظر بگیرین :

public async Task PerformAction(DepositRequest model)
{
    var dto = new Deposit();

    dto.Price = model.Price;
    dto.Image = model.Image;
    
    // ...

}

 

یکی از اصول اصلی شیء گرایی ، SRP یا Single Responsibility Principal هست. اینکار عملا این اصل رو داره زیر سوال میبره و نباید این مسئله در کنترلر انجام بشه .

Validation یا صحت سنجی داده ها

از اصول اصلی در پیاده سازی نرم افزارها ، عدم اعتماد به ورودی کاربر هست ، تحت هر شرایطی. در این مواقع مسئله ی Validation پیش میاد .

پروسه ی صحت سنجی داده ها بایستی با روشهایی مثل استفاده از Data Annotation ها و … صورت بگیره تا با فاجعه ی انسانی زیر روبرو نشیم !

public async Task PerformAction(DepositRequest model)
{
    if (string.IsNullOrEmpty(model.Name))
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }


    // ...
}

Bussiness Logic

از جمله عملیات هایی که ممکن هست به اشتباه در کنترلر قرار بگیره ، BL کار هست. گاهی این مسئله با Validation اشتباه گرفته میشه .

از جمله مثال های مربوط به BL میشه به عملیات خرید، عملیات محاسباتی (مثلا محاسبه ی مالیات و …) ، ذخیره سازی تصویر و … اشاره کرد که این موارد هیچ جایگاهی در کنترلر ما ندارن !

Authorization

میشه پروسه ی Authorization رو مثل Validation دید با این تفاوت که اولی صحت سنجی میکنه که کاربر به جایی که نباید دسترسی نداشته باشه و دومی داده های ورودی کاربر رو بررسی میکنه

اگر شما در داخل Action تون ، از طریق پراپرتی User کاری انجام میدین و شرط و شروطی رو بررسی میکنین بدونین که یه جای کارتون میلنگه !

کنترل خطا (Error Handling)

اگر داخل کنترلرتون از try/catch استفاده میکنین و عملیات مرتبط با Log کردن داخلش قرار گرفته ، کارتون اشتباه هست.

در این مواقع راهکارهای مختلفی وجود داره . استفاده از Middleware ها یا Global Filter هایی مثل HandleError

دریافت یا ذخیره اطلاعات

اگر داخل کنترلرتون داده ای رو از دیتابیس میخونین و یا اینکه داده ای رو ذخیره میکنین دارین اشتباه میزنین !

قطعا این موارد بایستی از این بخش حذف بشه و به سرویس های دیگه ای منتقل بشه