راهنمایی در بهینه کردن کد
public List<tbl> SerchNewsByTitle(string title, int groupid)
{
try
{
var result = from n in tbl
where n.GroupId == groupid && n.Title.Contains(title)
select n;
if (groupid== -1)
{
result = from n in tbl select n;
}
return result.ToList();
}
catch (Exception e)
{
AddExceptionData(e);
return null;
}
}
نقل قول: راهنمایی در بهینه کردن کد
الان این کد واقعیتونه گذاشتین یا نمونه کده صرفا جهت تفهیم موضوع؟ اگه کد واقعیتونه، چن مورد وجود داره:
a. اولا اینکه شما اصلا جستجویی براساس title انجام ندادی
b. دوما فرض کنیم groupId برابر -1 بود، متد شما جفت کوئری رو اجرا میکنه، یعنی کوئری اول رو بدون بررسی هیچ شرطی اجرا میکنه بعد توی بدنه if چک میکنه که groupId برابر -1 هست؟ که بله برابر هست و دوباره یه کوئری دیگه هم اجرا میکنه که اینکار بی معنیه (البته منظورم از اجرا این نیست که داده ها رو واکشی کنه چون تا متد tolist فراخوانی نشه کوئری سمت دیتابیس اجرا نمیشه)
اما درمورد یکپارچگی، احتمالا منظور طرفتون این باشه که هر متد دقیقا باید کاری که براش تعریف شده رو انجام بده، یعنی الان تو این مثال شما، متد searchByTitle باید فقط داده هایی رو واکشی کنه که groupId براشون بزرگتر از -1 هست، و اون قسمت if رو کلا از این متد حذف کنین و براش یه متد بنویسین که تنها کاری که میکنه واکشی کل خبرها هست، و شما باید خارج از این دوتا متد چک کنین که آیا کاربر گروهی انتخاب کرده یا خیر، اگر گروهی انتخاب کرده بود، متد searchByTitle با groupId انتخاب شده اجرا بشه، در غیر اینصورت متدی که وظیفه واکشی کل خبرها رو داره اجرا کنین
نقل قول: راهنمایی در بهینه کردن کد
ممنون از راهنماییتون، نکات خوبی گفتید
نه کد واقعی نیست، برای تفهیم موضوع این کد رو گذاشتم
a. بله درست می گید،بیشتر چون تمرکزم روی اون -1 بود سرچ بر اساس تایتل رو فراموش کردم بزارم
b. بله مورد b به نظر خودم هم رسیده بود ولی نمی دونستم چطور باید این رو بهینه کنم
نقل قول:
و شما باید خارج از این دوتا متد چک کنین که آیا کاربر گروهی انتخاب کرده یا خیر،
به جای اینکه وقتی گروهی انتخاب نشده از 1- استفاده کنم چه گزینه های دیگه ای می تونه وجود داشته باشه؟
چون ایشون تأکید داشتن که 1- قابل فهم و گویا برای دیگران نیست
آیا enum یا const جایگزین بهتری هستند؟
ممنون می شم اگه توضیحتون همراه با کد باشه، چون اون طوری قابل فهم تره
نقل قول: راهنمایی در بهینه کردن کد
enum به مراتب بهتز از منفی یک هست
در ضمن میتونید دستورات شرطی که نیاز دارید را با اپراتور ؟ در بدنه where بکار ببرید
نقل قول: راهنمایی در بهینه کردن کد
نقل قول:
در ضمن میتونید دستورات شرطی که نیاز دارید را با اپراتور ؟ در بدنه where بکار ببرید
بله این مورد انجام شده
public List<tbl> SerchNewsByTitle(string title, int groupid)
{
try
{
var result = from n in tbl
where (n.groupid == (groupid < 0 ? np.Fk_groupid: groupid)) && n.Title.Contains(title)
select n;
return result.ToList();
}
catch (Exception e)
{
AddExceptionData(e);
return null;
}
}
ولی هنوز راه حلی برای اجتناب از استفاده از 1- پیدا نکردم
نقل قول:
enum به مراتب بهتز از منفی یک هست
امکانش هست به صورت شبه کد این رو بنویسید؟
نقل قول: راهنمایی در بهینه کردن کد
شما که همچنان کدتون مثل قبله، بنده گفتم خارج از متد چک کنین که groupid برابر -1 هست یا نه؟ اگر بود، یه متد (مثلا GetAllNews) اجرا کنین که وظیفه واکشی کل رکورد هارو داره (یا هر مورد دیگه ای که خودتون مد نظر دارین) اگر مخالف -1 بود بیاد متد SearchNewsByTitle رو اجرا کنه
در ضمن شما اول نحوه تشخیص اینکه طرف گروهی انتخاب کرده یا نه رو بیان کنین تا روش خودتون رو پیش بگیریم و بگیم چجوری از enum استفاده کنین
نقل قول: راهنمایی در بهینه کردن کد
نقل قول:
در ضمن شما اول نحوه تشخیص اینکه طرف گروهی انتخاب کرده یا نه رو بیان کنین تا روش خودتون رو پیش بگیریم و بگیم چجوری از enum استفاده کنین
در صفحه یک باتن قرار داره که با کلیک روی اون یک پاپ آپ باز میشه و گروه های اخبار در این پاپ آپ نمایش داده میشه، وقتی کاربر یک گروه رو انتخاب می کنه به صورت جاوااسکریپتی آی دی گروه در یک hidden field ریخته میشه و توسط jquery.ajax به متد پاس داده میشه
مقدار hidden field به طور پیش فرض 1- قرار دادم
<input type="hidden"
id="Fk_groupid" value="-1" />
$('#test').autocomplete({
serviceUrl: '/GetNews',
paramName: 'prefix',
onSearchStart: function (params) {
params.groupid = $("#Fk_groupid").val();
},
نقل قول: راهنمایی در بهینه کردن کد
شما اون مقدار پیشفرض (value=-1) رو حذف کنین و سمت کنترلر برای اکشن GetNews پارامتر groupId رو null پذیر یا همون nullable کنین، و داخل بدنه اکشن به جای چک کردن -1، چک کن که آیا groupId برابر null هست یا خیر، نیازی به enum نیست، حالا من ساختار کد اکشنتون رو نمیدونم ولی تقریبا یه همچین چیزی:public ActionResult GetNews(int? groupId)
{
if (groupId == null)
return GetAllNews();
return SearchNewsByTitle(groupId);
}
نقل قول: راهنمایی در بهینه کردن کد
نقل قول:
نوشته شده توسط
ali_md110
enum به مراتب بهتز از منفی یک هست
در ضمن میتونید دستورات شرطی که نیاز دارید را با اپراتور ؟ در بدنه where بکار ببرید
دوستان سلام
اینجا صحبت از دستورات شرطی و بهینه سازی کد شد، بنده هم سوالی داشتم.
در تاپیک های مختلف تالار امنیت صحبت از این شده که از دستورات شرطی به صورت مستقیم استفاده نکنید. چون با معکوس کردن شرط، بدیهی هست که شرط دور زده میشه.
شما ایده ای در مورد عدم استفاده از دستورات شرطی به صورت مستقیم در نظر دارید؟
بنده هنوز با مفهوم این موضوع آشنا نیستم. کمی مبهم هست.