سلام دوستان

یک برنامه دارم که مطابق معمول بصورت UnitOfWork دارم با بانک اطاعاتی کار میکنم. یک متد با نام Remove دارم که قبل از حذف یک ردیف باید چند آیتم را بررسی کنه. اول اینکه کاربری که قصد حذف ردیف را دارد همان کاربری باشد که ردیف را ایجاد کرده است و تایید نهایی هم نشده باشد و...

من در متد یکی Pageها دستور را بصورت زیر نوشتم:


public IActionResult OnPostRemove(int id)
{
var report = db.tblDailyReportPiping.Find(id);


if (report == null)
return new JsonResult(new { status = false, message = "Invalid Data" });


//فقط کاربری که اطلاعات را تولید کرده است اجازه حذف اطلاعات را دارد
if (report.fldUserId != HttpContext.Session.GetActiveUser_UserId())
return new JsonResult(new { status = false, message = "Incorrect user" });


//فقط ردیفی را میتاون حذف کرد که تایید اولیه و تایید نهایی نشده باشد
if (report.fldApproved || report.fldFinalized)
return new JsonResult(new { status = false, message = "Approved or finalized before" });


try
{
//حذف ردیف مورد نظر
if (!db.tblDailyReportPiping.Remove(report))
return new JsonResult(new { status = false, message = "unable to remove" });


//ذخیره تغییرات در بانک اطلاعاتی
if (db.SaveChangesByUserId(HttpContext.Session.GetAct iveUser_UserId()) == 0)
return new JsonResult(new { status = false, message = "unable to save" });
}
catch (Exception ex)
{
return new JsonResult(new { status = false, message = ex.Message });
}


return new JsonResult(true);
}



سوالم این هستش که ارزیابی یک ردیف جهت حذف یا هر یک از عملیات CRUD در بانک اطلاعاتی در کدام سطح انجام بشه بهتره؟ آیا مثلا در متد بالا فقط دستور Remove را از UOW اجرا کنم و بررسی رو به لایه Repository واگذار کنم؟ یا اینکه در Method ارزیابی را انجام بدم و از لایه Repository صرفا برای ثبت و اعمال تغییرات در بانک استفاده کنم؟

البته خوبی انجام ارزیابی در لایه Repository اینه که اگر برنامه دیگه ای بخواهد ازش استفاده کنه دیگه نگران نحوه حذف اطلاعات نیستم چون قبل از اعمال تغییرات، شرایط حذف توسط Repository بررسی مشه. اما اگر فرض کنیم که استفاده کننده UOW برنامه جاری من باشه، بهترین گزینه کدام است؟ کدهای کدام لایه کمتر باشه بهتره؟ البته فرض دیگر هم اینه که ممکنه دستور Remove از چندجای برنامه صدا زده بشه، بنابراین برای کاهش کدهای تکراری و جلوگیری از خطا به نظرم تمام کدها به لایه Repository انتقال پیدا کنه بهتره. فقط چون آیتم تطبیق کد کاربری باید انجام بشه، ضرورتا باید این مقدار را به لایه Repository ارسال کنم.

ممنون اگر راهنمایی کنید