View Full Version : سوال: درک استفاده از آرایه برای برگرداندن خطاها به متد ها
jaykob
یک شنبه 16 اسفند 1394, 12:23 عصر
سلام دوستان
من مسئله رو کوتاه می گم که برام سوال شده : من یک کلاس دارم با ۱۰ تا متد از انواع مختلف مثل int , bool , void حالا این متد ها هر کدام اگر به خطایی بخورند کد خطایی یا در حالتی دیگر رشته خطا را بر می گردانند . من یک متغییر readonly تعریف کردم از نوع static و داخل هر متدی که خطایی رخ بده می ریزم داخل این متغییر و داخل controller خودم استفاده می کنم و ...
سوال من : من درک نمی کنم این مدلی که من استفاده کردم اگر نرم افزار به طور مثال ۳ کاربر همزمان یک متد رو صدا بزنن که به خطا هم بخوره و ۳ خطای متفاوت باشند آیا کد خطاها درست بر می گرده یا مثلا آخرین کد خطا برای همه نمایش داده می شه این همزمانی مشکلی ایجاد می کنه یا خیر ؟
ممنون می شم واضح این موضوع رو برای من توضیح بدید
با تشکر
bomb23
دوشنبه 17 اسفند 1394, 01:32 صبح
سلام
داخل وب وقتی کی کاربر یک درخواستی به سرور میده یک سشن مخصوص اون ایجاد میشه، مثلا اگه درس سیستم عامل یادت باشه یه چیزی مث فرآیند جدید ایجاد مشه. این نمونه برای من با شما متفاواته و توسط خود زبان برنامه نویسی کنترل میشه. پس نگران همزمانی درخواست های کاربرات نباش اگه میخواست مشکل پیشبیاد موقع درخواست یک صفحه از سایت هم میتونست مشکل پیش بیاد مثلا من اخبارو بخوام شما مقالات ولی برامون برعکس نشون بده راجع به چگونگی کار هم مقاله زیاد هست با یه سرچ. پس نگران نباش همه چیز جداست اتفاقا اونایی که بخوان یه داده هایی رو در کل برنامه برای همه کاربرا قابل دسترس و یکی نگه دارن باید براشون مسئله به وجود بیاد.
rezashaban
دوشنبه 17 اسفند 1394, 02:03 صبح
سلام دوست من با این سرچی که من زدم و مطالبی که من دیدم اگه مقدار متغیر static یه جای برنامه توسط بک کاربر تغییر کنه در کل برنامه و برای همه کاربران تغییر میکنه مثلا اگه متغیر x توسط کاربر اول مقدار 10 بگیره و بعد توسط کاربر دوم مقدار 20 بگیره و حالا اگه کاربر اول مقدار اون متغییر رو صدا بزنه مقدار 20 رو دریافت میکنه
به نظر من شما یه کار دیگه بکن
یه کلاس استاتیک برای متن های خطاهایی که احتمالا زخ میده توی برنامه بگیر و یه سری property براش تنظیم کن که همون متن های خطاهاست و حالا هرجای برنامه که به خطا خوردی اون متن دلخواه رو برای کاربر بفرست اینطوری مدیریت متن خطاها برات راختتر میشه و سرعت کارت بالاتر میره
jaykob
دوشنبه 17 اسفند 1394, 02:19 صبح
سلام دوست من با این سرچی که من زدم و مطالبی که من دیدم اگه مقدار متغیر static یه جای برنامه توسط بک کاربر تغییر کنه در کل برنامه و برای همه کاربران تغییر میکنه مثلا اگه متغیر x توسط کاربر اول مقدار 10 بگیره و بعد توسط کاربر دوم مقدار 20 بگیره و حالا اگه کاربر اول مقدار اون متغییر رو صدا بزنه مقدار 20 رو دریافت میکنه
به نظر من شما یه کار دیگه بکن
یه کلاس استاتیک برای متن های خطاهایی که احتمالا زخ میده توی برنامه بگیر و یه سری property براش تنظیم کن که همون متن های خطاهاست و حالا هرجای برنامه که به خطا خوردی اون متن دلخواه رو برای کاربر بفرست اینطوری مدیریت متن خطاها برات راختتر میشه و سرعت کارت بالاتر میره
سلام
تشکر از شما بابت پاسختون . اما الان برای برگردوندن اون متن هم باید داخل یک متغییر بریزم و بعد به کنترلر بدم ؟ دوباره که همون موضوع آخرین پیام خطا می شه .
یا من درست حرفتون رو متوجه نشدم .
امکانش هست یک مثال بزنید و عملیاتی بفرمایید باید چه کرد ؟
تشکر
jaykob
دوشنبه 17 اسفند 1394, 02:20 صبح
سلام
داخل وب وقتی کی کاربر یک درخواستی به سرور میده یک سشن مخصوص اون ایجاد میشه، مثلا اگه درس سیستم عامل یادت باشه یه چیزی مث فرآیند جدید ایجاد مشه. این نمونه برای من با شما متفاواته و توسط خود زبان برنامه نویسی کنترل میشه. پس نگران همزمانی درخواست های کاربرات نباش اگه میخواست مشکل پیشبیاد موقع درخواست یک صفحه از سایت هم میتونست مشکل پیش بیاد مثلا من اخبارو بخوام شما مقالات ولی برامون برعکس نشون بده راجع به چگونگی کار هم مقاله زیاد هست با یه سرچ. پس نگران نباش همه چیز جداست اتفاقا اونایی که بخوان یه داده هایی رو در کل برنامه برای همه کاربرا قابل دسترس و یکی نگه دارن باید براشون مسئله به وجود بیاد.
سلام دوست عزیز
ممنون بابت توضیحاتتون اما الان گفته شما دقیقا برعکس گفته کاربر عزیز rezashaban هستش . امکان داره بیشتر توضیح بدید الان من واقعا مجدد گیج شدم !
تشکر
rezashaban
دوشنبه 17 اسفند 1394, 02:26 صبح
حالا من دقیق از ساختار کارتون اطلاع ندارم و گرنه شما هم میتونی فقط اون مقدار رو return کنی یا از روش های دیگه استفاده کنی مثلا ViewBag یا ViewData و یا روش های دیگه...
rezashaban
دوشنبه 17 اسفند 1394, 02:32 صبح
البته بگم اون کلاس قبلی که گفتم ایجاد کنی برای مدیریت متن خطاهای برنامه ت بود وگرنه میتونی هرجای برنامه که خواستی اون متن رو تابپ کنی و به کاربر نشون بدی ولی اینجوری برای تغییر یک متن خطا که ممکنه چندجای پروژه ت ایراد داشته باشه باید بری و همه جا تغییر بدی که کارت خیلی کند میشه و مدیریت روی پروژه خودت رو از دست میدی
jaykob
دوشنبه 17 اسفند 1394, 02:38 صبح
حالا من دقیق از ساختار کارتون اطلاع ندارم و گرنه شما هم میتونی فقط اون مقدار رو return کنی یا از روش های دیگه استفاده کنی مثلا ViewBag یا ViewData و یا روش های دیگه...
تشکر از شما
متد من شکل زیر هستش و حدود ۲۰ تا از این متد ها در یک کلاس هست . من می خوام بدون جای اون return ??? چی باید بنویسم ؟ این متد ها در کنترلر بازسازی و مورد استفاده قرار می گیره ...
public StudentInfo GetStudent(string code)
{
try
{
///Some Code
return myModelVal;
}
catch(FaultException<ValidationFault> ex)
{
var strb = new StringBuilder();
strb.AppendLine(ex.Message);
foreach (var item in ex.Detail.ValidaitonFaultItems)
{
strb.AppendLine(item.ErrorCode + " : " + item.ErrorDescription);
}
return ???
}
}
rezashaban
دوشنبه 17 اسفند 1394, 02:49 صبح
اینطور که متوجه شدم این کد شما الان داخل یک کلاس و خارج از کنترلر هست اگه اینطور باشه شما میتونی به شکل زیر عمل کنی:
public StudentInfo GetStudent(string code, out string message)
{
try
{
///Some Code
}
catch(FaultException<ValidationFault> ex)
{
var strb = new StringBuilder();
strb.AppendLine(ex.Message);
foreach (var item in ex.Detail.ValidaitonFaultItems)
{
strb.AppendLine(item.ErrorCode + " : " + item.ErrorDescription);
}
message = errorMessage.SomeTitle; //errorMessage -> همون کلاس که گفتم برای مدیریت متن خطاهات ایجاد کن
return 'فک نکنم بتونی غیر از نوع خروجی متدت اینجا چیز دیگه رو ریترن کنی اگر تونستی همون متن خطا رو ریترن کن و پارامتر مسیج رو حذف کن'
}
return myModelVal;
}
jaykob
دوشنبه 17 اسفند 1394, 02:56 صبح
تشکر از شما
الان این متغییر message از نوع static قاعدتا باید باشه ؟ خوب الان سوال اول من دوباره پیش می آد که همزمان ۳ نفر به ۳ خطای متفاوت بر می خورن آیا آخرین خطا بر می گرده یا نه ؟
در حال حاظر روش برای من مهمه ...
تشکر
rezashaban
دوشنبه 17 اسفند 1394, 03:47 صبح
متغیر message یک پارامتر خروجی روی تابع شما هستش که داره از کلاس مقدار میگیره و نیازی به استاتیک بودنش نیست شما هنگام فراخوانی تابع باید اینکار رو بکنی:
string message = string.empty;
GetStudent(code,message);
حالا مقدار خطا داخل متغییر
message
هستش و میتونی به کاربر نمایش بدی
jaykob
دوشنبه 17 اسفند 1394, 06:47 صبح
سلام تشکر از شما
ممنون
من یک کارم خودم کردم اومدم در بدنه کلاس دو تا پروپرتی به شکل زیر استفاده کردم :
private string _localmessage;
public string outmeesage => _localmessage;
و در کنترلر تونستم راحت پیام خطایی که در _localmessage بود رو بخونم به شکل زیر :
var myservice=new StudentMainClass();
var mysearch = myservice.GetStudent("2613708");
ViewBag.result = myservice.outmeesage;
ViewBag.family = mysearch.Family;
return View();
این کار چطوره ؟ اون مسئله سوال اولم در این موردی خودم نوشتم هم هست ؟
با تشکر از همه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.