نمایش نتایج 1 تا 12 از 12

نام تاپیک: چند سوال درباره کلاس

  1. #1
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    کاشان
    پست
    580

    Talking چند سوال درباره کلاس

    دوستان من با کمک شما شروع به نوشتن کلاس کردم . الان یه کلاس واسه کاربران نوشتم که کدش در زیر :

    class Users
    {
    private string _code;
    private string _fname;
    private string _lname;
    private bool _sex;
    private string _intcode;
    private string _username;
    private string _password;

    public Users()
    {
    _code = _fname = _lname = _intcode = _username = _password = String.Empty;
    _sex = false;
    }

    public Users(string code)
    {
    try
    {
    if (IsExist("Members", "code=" + code))
    {
    SqlCommand com = new SqlCommand();
    com.Connection = New_Connection();
    com.CommandText = "SELECT fname,lname,sex,intcode FROM Members WHERE code=@c";
    com.Parameters.AddWithValue("@c", code);
    SqlDataReader reader = com.ExecuteReader();
    reader.Read();
    _code = code;
    _fname = reader.GetString(0);
    _lname = reader.GetString(1);
    _sex = reader.GetBoolean(2);
    _intcode = reader.GetString(3);
    }
    }
    catch (Exception ex)
    {
    }
    }

    public string code
    {
    get { return _code; }
    set { _code = value; }
    }
    public string fname
    {
    get { return _fname; }
    set { _fname = value; }
    }
    public string lname
    {
    get { return _lname; }
    set { _lname = value; }
    }
    public bool sex
    {
    get { return _sex; }
    set { _sex = value; }
    }
    public string intcode
    {
    get { return _intcode; }
    set { _intcode = value; }
    }
    public string username
    {
    get { return _username; }
    set { _username = value; }
    }
    public string password
    {
    get { return _password; }
    set { _password = value; }
    }

    privatestatic SqlConnection New_Connection()
    {
    SqlConnection _sqlcon = newSqlConnection();
    _sqlcon.ConnectionString = "Data Source=(local);Initial Catalog=Sharif_Res_DB;Integrated Security=True";
    _sqlcon.Open();
    return _sqlcon;
    }

    publicbool IsExist(string table, string whcol)
    {
    SqlCommand com = new SqlCommand();
    com.Connection = New_Connection();
    com.CommandText = "SELECT COUNT(id) FROM " + table + " WHERE " + whcol;
    int num = Convert.ToInt32(com.ExecuteScalar());
    com.Connection.Close();
    if (num > 0)
    return true;
    return false;
    }

    public string New_Percode()
    {
    string _percode = String.Empty;
    SqlCommand com = newSqlCommand();
    com.Connection = New_Connection();
    com.CommandText = "SELECT MAX(id) FROM Users";
    SqlDataReader reader = com.ExecuteReader();
    if (reader.Read())
    _percode = (reader.GetInt32(0) + 1).ToString();
    else
    _percode = "10000";
    _percode = PersianDate.Now.Year.ToString().Substring(2, 2) + _percode + "000";
    reader.Close();
    com.Connection.Close();
    return _percode;
    }

    public bool Reg_NewUser()
    {
    try
    {
    string subcol = String.Empty;
    string subval = String.Empty;
    if (!String.IsNullOrEmpty(_intcode))
    {
    subcol = ",intcode";
    subval = ",@i";
    }
    SqlCommand com = new SqlCommand();
    com.Connection = New_Connection();
    com.CommandText = "INSERT INTO Users (code,fname,lname,sex" + subcol + ") VALUES (";
    com.CommandText += "@c,@f,@l,@s" + subval + ")";
    com.Parameters.AddWithValue("@c", _code);
    com.Parameters.AddWithValue("@f", _fname);
    com.Parameters.AddWithValue("@l", _lname);
    com.Parameters.AddWithValue("@s", _sex);
    try
    {
    com.Parameters.AddWithValue("@i", _intcode);
    }
    catch (Exception ex)
    {
    }
    com.ExecuteNonQuery();
    return true;
    }
    catch
    {
    return false;
    }
    }

    public static bool Del_User(string code)
    {
    try
    {
    SqlCommand com = newSqlCommand();
    com.Connection = New_Connection();
    com.CommandText = "DELETE FROM Users WHERE code=@c";
    com.Parameters.AddWithValue("@c", code);
    com.ExecuteNonQuery();
    return true;
    }
    catch (Exception ex)
    {
    return false;
    }
    }

    public bool Update_User()
    {
    return true;
    }
    }

    حالا چند سوال :
    1. درست نوشتم یعنی قوانین توش رعایت شده ؟
    2. به عنوان مثال من فیلد کد ملی کاربر رو در دیتابیس NULL گذاشتم . حالا این که چک کنم که اگه این متغیر در برنامه مقدار نداره یا اگه داره باید در کلاس اعمال بشه یا کلاس باید به شکل کلی نوشته بشه و من این حالت رو در برنامم چک کنم ؟ ( مثلا من اومدم و تو کلاس اینو چک کردم ، در تابع Reg_NewUser())
    3. کلا راهی هست که چک کنیم اگه برخی متغیرهای اجباری در فرم مثل نام خالی هستند ، ما بفهمیم یا باید حتما تک تک اونها چک بشن ؟
    4. من می خوام کلاس Members رو هم بنویسم که از این کلاس به ارث ببره ، اینم یه توضیح بدین لطفا .

    پیشاپیش هم تشکر می کنم


  2. #2
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تهران
    پست
    1,025

    نقل قول: چند سوال درباره کلاس

    برای چک کردن فیلدهای یه کلاس من معمولا از یه متد توی همون کلاس استفاده میکنم که فیلدها رو چک میکنه و برای هر نمونه از کلاس در موقع ذخیره اول اون متد رو صدا میزنم

  3. #3
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: چند سوال درباره کلاس

    اسم کلاستو از users به User تغییر بده چون عملا داری با یه کاربر کار میکنی .
    try
    {
    if (IsExist("Members", "code=" + code))
    {
    چیز غریبیه معولا اگر نبود یه throw Exception میکنند .

    در کل برای شروع بد نیست سعی کن Source code زیاد بخونی اینجوری دیدت بهتر میشه

  4. #4
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    کاشان
    پست
    580

    نقل قول: چند سوال درباره کلاس

    راستی دوست عزیز لطف کن تفاوت throw Exeption رو با catch به من بگو . می خواستم سوال کنم یادم رفته بود .
    اگه میشه بگو چه نقاتی از کد ضعف فجیعی داره که میگی Source Code زیاد ببینم تا رو اونا بیشتر Focus کنم .

  5. #5
    کاربر دائمی آواتار vahid.bz
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    همدان
    سن
    31
    پست
    243

    نقل قول: چند سوال درباره کلاس

    سلام
    وقتی می خوای توی برنامه نویسی بگی "خطایی از نوع ایکس بده" از throw استفاده می کنی و وقتی می خوای بگی "خطایی از نوع ایکس بگیر "از catch استفاده می کنی و وقتی می خوای بگی "ای بر نامه توی این قسمت احتمال پرتاب خطا هست"ازtry استفاده می کنی

  6. #6
    کاربر دائمی آواتار vahid.bz
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    همدان
    سن
    31
    پست
    243

    نقل قول: چند سوال درباره کلاس

    class Member:User
    {}
    1.در کلاس ای که به ارث می بری لازم نیست متغیر های شی ای قبلی رو دو باره بنویسی و فقط کافی متغیرهای جدیدت بنویسی

  7. #7
    کاربر دائمی آواتار adinochestva
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    jre
    پست
    460

    نقل قول: چند سوال درباره کلاس

    اینجا

    public static bool Del_User(string code)
    {
    try
    {
    SqlCommand com = newSqlCommand();
    com.Connection = New_Connection();
    com.CommandText = "DELETE FROM Users WHERE code=@c";
    com.Parameters.AddWithValue("@c", code);
    com.ExecuteNonQuery();



    اگر مقدار رو چک کنی بهتره البته ممکنه تو لایه های بالاتر این کار رو انجام بدی
    در غیر این صورت با پاس کردن مقدار
    "1" or 1=1

    می شه کل کاربران رو پاک کرد

    درضمن اگه قراره برای هر کاربر یک instane از این کلاس ایجاد کنی دیگه del_user با پارامتر معنا نداره
    وقتی فراخوانی میشه همون کاربر که این متد تو اون فراخوانی می شه رو باید پاک کنی.
    همچنین add user

  8. #8
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: چند سوال درباره کلاس

    . کلا راهی هست که چک کنیم اگه برخی متغیرهای اجباری در فرم مثل نام خالی هستند ، ما بفهمیم یا باید حتما تک تک اونها چک بشن ؟
    با این روشی که تو استفاده کردی نه .

    گر مقدار رو چک کنی بهتره البته ممکنه تو لایه های بالاتر این کار رو انجام بدی
    من با این حرف دوستمون کاملا مخالفم .

    class Member:User
    این Class فعلا به درد ارث بری نمیخوری لا اقل متد هات به صورت virtual بنویس . تا یه خورده بهتر شه .

    گه میشه بگو چه نقاتی از کد ضعف فجیعی داره که میگی Source Code زیاد ببینم تا رو اونا بیشتر Focus کنم .
    همونطور تو پست های قبلی هم گفتم اساس محور .net اونهایی که واقعا بصورت .net فکر میکنند thinking small code است . یعنی هیچوقت چرخو دوباره اختراع نمیکنند . ولی بازم میگم برای شروع خوبه
    کلا خوندن source code همیشه خوبه حتی بزرگترین برنامه نویس ها هم اینکارو میکنند چون هر source code مثل امضا میمونه و مال هر کسی با کس دیگه فرق میکنه اینکه آدم متوجه بشه جور دیگه ای هم میشه فکر کرد خیلی خوبه شاید من این کلاسو مینوشتم 50خط میشد شاید کس دیگه با 10 خط بنویسه .
    کلا بر میگرده به نگاه طرف به oo .

  9. #9
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    کاشان
    پست
    580

    Talking نقل قول: چند سوال درباره کلاس

    چیز غریبیه معولا اگر نبود یه throw Exception میکنند .
    نحوه هندل کردن خطاها رو تغییر دادم .

    در غیر این صورت با پاس کردن مقدار "1" or 1=1 می شه کل کاربران رو پاک کرد
    خوب یعنی query من به شکل زیر در می آد :
    DELETE FROM Users WHERE code="1=1"

    یا یه چیزی تو این مایه ها .
    فکر نمی کنم این مشکلی ایجاد کنه !!!
    اگه کلا بعد از where رو از ورودی می گرفتم فکر کنم مشکل ساز می شد . حالا نمی دونم اگه مشکل داره تغییرش بدم ؟؟؟

    درضمن اگه قراره برای هر کاربر یک instane از این کلاس ایجاد کنی دیگه del_user با پارامتر معنا نداره
    وقتی فراخوانی میشه همون کاربر که این متد تو اون فراخوانی می شه رو باید پاک کنی.
    همچنین add user
    خوب فرض کن مدیر وارد سیستم بشه و بره تو بخش اعضا که یک دیتاگرید شامل کد ، نام و نام خانوادگی اونهاست . حالا یک ردیف رو انتخاب کنه و کلید حذف رو بزنه . در این حالت فکر نمی کنم نیاز باشه که یک شی ساخته بشه . ولی در مورد ثبت کاربر چون اعضا داده ای کلاسم باید مقدار بگیرند تا کاربر جدیدو ثبت کنم ، مجبورم یک شی ازش بسازم .

    با این روشی که تو استفاده کردی نه .
    یعنی چی ؟ معمولا چه روشی استفاده می کنن ؟ بیشتر اینو توضیح بده البته لطفا .

    من با این حرف دوستمون کاملا مخالفم .
    با کدوم قسمتش ( چک کردن یا محل چک کردن ) و چرا ؟

    این Class فعلا به درد ارث بری نمیخوری لا اقل متد هات به صورت virtual بنویس . تا یه خورده بهتر شه .
    آخه من در کلاس دوم فقط از اعضا داده ای و یکی یا نهایتا دو تا از توابع این کلاس استفاده می کنم و بقیه رو باید override کنم .

    کلا خوندن source code همیشه خوبه
    حتما این کارو می کنم .

    در کل اگه موارد دیگه ای در این کلاس می بینید خوشحال میشم راهنماییم کنید .

    دوستان من بزودی کلاسو کامل تر می کنم و میذارم ، انشاالله هم خودم راه بیافتم و هم برای دوستانی که تازه می خوان وارد این مقوله بشن مفید باشه .
    آخرین ویرایش به وسیله seven7777777 : پنج شنبه 10 اردیبهشت 1388 در 10:00 صبح دلیل: تکمیل کردن پاسخ

  10. #10
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    کاشان
    پست
    580

    نقل قول: چند سوال درباره کلاس

    چی شد ، از دوستان هیچ کس نمی خواست از جوابش دفاع کنه یا توضیحی بده ؟!؟!؟!؟!

  11. #11
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تهران
    پست
    1,025

    نقل قول: چند سوال درباره کلاس

    به طور کلی طراحی و اجرای کلاس به دید خود شخص بستگی داره و همینطور به نوع پروژه و نحوه اجرای اون

    پیشنهاد میکنم چند نکته رو در نظر داشته باشید
    کلاسها رو جوری طراحی کنید که به روز رسانیشون حدالمقدور راحت باشه و نگهداریشون
    کلاسها رو به صورت کلی طراحی کنید تا بتونید تو پروژه های مختلف استفاده کنید
    استفاده از اینترفیس هم خیلی عالی

  12. #12
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: چند سوال درباره کلاس

    به طور کلی طراحی و اجرای کلاس به دید خود شخص بستگی داره
    تو پروژه های خونگی این حرف کاملا متینه ولی در مورد پروژه های تجاری داستان به کلی فرق میکنه احتمالا به زودی نمونه کدی در تاپیک layering میزارم .

    ببین در دنیای .net چند جور آدم هست .
    1- برنامه نویس حقوق از 700 تومان تا 10000 تومان در ساعت
    2- معمار از 7000 تا 25000 تومان (معمولا مدیر پروژه هم هست )
    3 - مشاور از 20000 تا 30000 تومان
    و ...
    البته این قیمت های ایرانه . و افراد مختلفی که من میشناسم شاید پایینتر یا بالاتر از اینها هم باشه من نشناسم ولی فعلا عرفه .

    طراحی کلاس های پروژه های به درد بخور در 100 موارد برای نفر دوم و سوم است و کد نویس با عرض معذرت نقش مرده شور بازی میکنه .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •