PDA

View Full Version : Validation داده ها



resident
سه شنبه 16 بهمن 1386, 14:09 عصر
سلام.
من برای اعتبارسنجی داده ها از روشی که خواهم گفت استفاده می کنم. تقریبا مطمئنم که این روش غلطه اما از طرفی هم بنا به دلایلی ، مجبورم از این روش استفاده کنم. اگه لطف کنید نظرتونو بگید ممنون میشم.

به عنوان مثال فرض کنید در فرمی بنام frm_pishnahade_tarh تکست باکسی بنامtxtcode_tarh داریم و کاربر هم حتما باید اونو پر کنه. یک کلاس به نام pishnahade_tarh هم داریم که محتویات تکست باکس در فیلد code_tarh این کلاس قرار بگیره.
اینهم کدهاشون:


public partial class frm_pishnahade_tarh : parent
{
pishnahade_tarh pt = new pishnahade_tarh();

private void save_Click(object sender, EventArgs e)
{
string str;
DataBase db = new DataBase();

if (string.IsNullOrEmpty(txtcode_tarh.Text.Trim()))
{
MessageBox.Show("کد طرح را وارد نمایید");
return;
}
else
{
pt.code_pishnahade_tarh = txtcode_tarh.Text.Trim();
if (string.IsNullOrEmpty(pt.code_pishnahade_tarh))
{
MessageBox.Show("کد طرح فقط شامل حرف و عدد می باشد");
return;
}
}
}

class pishnahade_tarh
{
private string _code_pishnahade_tarh;

check_invalid_input cii = new check_invalid_input();

public string code_pishnahade_tarh
{
get { return _code_pishnahade_tarh; }
set
{
if (cii.chkletter_digit(value))
_code_pishnahade_tarh = value;
else
return;
}
}
}


همه کدهای اعتبارسنجی باید تو کلاس pishnahade_tarh باید بیاد.درسته؟

Alireza_Salehi
سه شنبه 16 بهمن 1386, 17:52 عصر
هر کلاسی باید برای عملیات داخلی خودش Validation را انجام بده تا حداکثر امنیت و حداقل خطا بوجود بیاد.

برای نمایش پیام های خطا به کاربر و Validation کنترل های روی فرم لینک های زیر را ببینید:
http://technet.microsoft.com/en-us/library/ms229603(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/f6xht7x2(VS.80).aspx

resident
سه شنبه 16 بهمن 1386, 20:32 عصر
هر کلاسی باید برای عملیات داخلی خودش Validation را انجام بده تا حداکثر امنیت و حداقل خطا بوجود بیاد.

برای نمایش پیام های خطا به کاربر و Validation کنترل های روی فرم لینک های زیر را ببینید:
http://technet.microsoft.com/en-us/library/ms229603(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/f6xht7x2(VS.80).aspx
Arsp_2004 جان ممنون. عالی بود.
در این اینکها validation روی مقادیر کنترلها انجام میشه، اما یه جایی خوندم که باید validation رو در دستور set خاصیت ها ، انجام داد. برای اینکه ببینه درست وارد شده یا نه.اول چک می کرد و در صورتی که مقادیر طبق فرمت دلخواه وارد شده بودند و یا مثلا در رنج مشخصی وارد شده اند یا نه، اونها رو در فیلدهای کلاس قرار میداد . فکر می کنم این دو تا فرق می کنن. درسته؟
اگه بخواهیم طبق مطالبی که شما لینکشونو گذاشتید عمل کنیم ، اونوقت لزومی برای استفاده از متد set هست؟

Alireza_Salehi
چهارشنبه 17 بهمن 1386, 06:21 صبح
اون مطلبی که من گذاشتم تناقضی با set نداره ، حتما هر کلاسی باید به طور کاملا مستقل از عوامل خارجی در داخل خودش هر عملیاتی که برای تایید داده ها لازم داره انجام بده ، در واقع کلاس شما باید از فرم های برنامه مستقل باشه ،

کلاس های دات نت مثال خوبی برای این کار هستند : اگر موقع استفاده از اونها داده مورد نظر شرایط لازم رو نداشته باشه استثنا بوجود میاد.

پس:
اولا باید کلاستون رو جوری طراحی کنید که اگر هیچ کنترلی روی داده های ورودی نبود خطا یا تناقضی در کار کلاستون پیش نیاد و اطلاعات غلط ثبت نشوند.

دوما در قسمت نمایش برنامه یا همان فرم ها اطلاعات ورودی چک شوند تا با فرمت مورد نظر سازگار باشند و بعد به کلاس مورد نظر پاس داده بشن. برای راحت تر شدن کد نویسی در این مرحله هم لینک زیر را ببینید:
http://msdn2.microsoft.com/en-us/library/ms950965.aspx

resident
چهارشنبه 17 بهمن 1386, 07:51 صبح
Arsp_2004 جان باز هم ممنون. زحمت کشیدید.




اولا باید کلاستون رو جوری طراحی کنید که اگر هیچ کنترلی روی داده های ورودی نبود خطا یا تناقضی در کار کلاستون پیش نیاد و اطلاعات غلط ثبت نشوند.

دوما در قسمت نمایش برنامه یا همان فرم ها اطلاعات ورودی چک شوند تا با فرمت مورد نظر سازگار باشند و بعد به کلاس مورد نظر پاس داده بشن.



مشکل من اینه که بین این 2 مرحله تفاوتی نمی بینم.


اولا باید کلاستون رو جوری طراحی کنید که اگر هیچ کنترلی روی داده های ورودی نبود خطا یا تناقضی در کار کلاستون پیش نیاد و اطلاعات غلط ثبت نشوند.

یعنی در set فیلدها چک کنیم که مثلا فقط عدد وارد بشه یا فرمت ایمیل درست باشه ، کاربر اون فیلد رو حتما پر کرده باشه ، کاراکترهای خاص وارد نکرده باشه و... منظورتون همینه؟
اگه منظورتون همینه ، پس دیگه چه نیازی به اینه که طبق آخرین مطلبی که لینکشو گذاشتید ، عمل کنیم؟

نمیدونم دیگه چی بگم ، گیج شدم. هر جور فکر می کنم باز متوجه نمی شم در این 2 مرحله ای که شما فرمودید چه کارهایی انجام میشه.
لطف می کنید راجع به کاری که در این 2 مرحله انجام میشه بیشتر توضیح بدید؟

با سپاس فراوان

Alireza_Salehi
چهارشنبه 17 بهمن 1386, 11:27 صبح
تفاوت از اینجا نشات میگیره که :
اگر شما قراره یک کلاس طراحی کنید و اون رو چندین بار در پروژه های مختلف استفادخ کنید ، باید این کلاس مستقل از فرم باشه، یعنی این کلاس کاری نداره از تو یه کلاس دیگه داره مقدار دهی میشه یا از تو یه فرم، فقط هر داده ای که به هر طریقی بهش داده بشه صحت و سلامتش رو چک می کنه تا در روند کارش مشکلی پیش نیاد و اگر مشکلی بود مثلا یک استثنا (Exception) تولید میکنه.

حالا توی یک برنامه قراره از این کلاس استفاده بشه، خود کلاس که مشکلی نداره چون جوری طراحی شده که داده ها رو برای جلوگیری از خطا چک میکنه، ولی باید مکانیزمی در برنامه وجود داشته باشه تا به کاربر پیام بدیم که مثلا فلان فیلد رو با فلان فرمت وارد کن! برای این کار از اون لینک هایی که گذاشتم استفاده میشه.


البته اگر برنامه بزرگ و چند لایه و پیچیده نیست می تونید این کار رو به عهده همون فرم بذارید و زیاد مسئله رو پیچیده نکنید. در برنامه های کوچیک و متوسط اگر این استقلالی که گفتم رو رعایت نکنید مشکل خاصی پیش نمیاد.