علی شکرالهی
بنیانگذار توسینسو و توسعه دهنده

6 خطای انسانی که نباید در Controller های asp.net رخ بده !

وقتی شروع به کد زنی میکنیم ، ممکنه جایی برای انجام سریعتر کارها یه سری کدها رو جایی بنویسیم که نباید مینوشتیم . انگار که قیمه رو بریزیم تو ماستااا در زیر 6 مورد از موارد ماست ریزی رو باهم بررسی میکنیم .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

1- Map کردن DTO ها

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

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

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

}

 

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

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

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

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


    // ...
}

3-Bussiness Logic

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

4-Authorization

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

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

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

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

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


علی شکرالهی
علی شکرالهی

بنیانگذار توسینسو و توسعه دهنده

علی شکرالهی، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس موبایل، مهندسی نرم افزار از دانشگاه آزاد اسلامی واحد کرج ، بیش از 15 سال سابقه ی فعالیت های حرفه ای و آموزشی

نظرات