PDA

View Full Version : نحوه ارسال پارامتر بین لایه ها



na3er-faraji
شنبه 17 مهر 1389, 15:25 عصر
کدوم روش ارسال استانداردتره؟
1)ارسال پارامترها به عنوان پارامترهای یک متد
2)ساخت پراپرتی در کلاس و مقداردهی آنها و استفاده از آن ها توی کلاس

من هر دو روش رو دیدم استفاده میشه. مثلا تو فیلم های آموزشی مهندس کیانی از روش دوم استفاده میشه و تو خیلی از برنامه ها دیدم که از روش اول استفاده میشه. حالا به نظر شما کدوم روش بهتره و به چه دلیل؟؟؟

شاهرخ عشایری
شنبه 17 مهر 1389, 17:39 عصر
به عقیده من از هر دو روش میشه استفاده کرد فقط باید به نحوه دسترسی به اونها توجه نمود.

AmirHarirbafan
شنبه 17 مهر 1389, 18:10 عصر
من خودم به شخصه از روش اول استفاده میکنم ، چون به نظرم ، کپسوله سازی رو بیشتر رعایت میکنه و کنترل روش بیشتره
معمولا توسط سازنده یا بعضی وقتا اگه در زمانی غیر از زمان ایجاد کلاس باشه ، از طریق یک متد با پیشوند Set ، مقادیرم رو تذریق میکنم

na3er-faraji
شنبه 17 مهر 1389, 21:28 عصر
من هنوز جوابمو نگرفتم. به هر حال یکی از این دو روش باید استاندارد تر باشه؟؟؟ کسی میتونه توضیح کاملی بده

jalalx
شنبه 17 مهر 1389, 21:42 عصر
این دو سوال شما در واقع یه سواله که جوابشو خودتون هم می دونید!!!
البته در بعضی موارد خاص مثل الگوی استراتژی، زوش اول مورد نظره ولی در اکثر موارد هر دو روش یکی اند!

این مثالی که زدمو ببینید:




class MyClass
{
public MyClass(int id, string name)
{
this.ID = id;
this.Name = name;
}

public MyClass()
: this(0, "Default Name")
{
}

public int ID { get; set; }

public string Name { get; set; }

public void Foo()
{
Console.WriteLine("{0} - Name = {1}", ID, Name);
}
}

na3er-faraji
یک شنبه 18 مهر 1389, 14:37 عصر
ببینید این روشیه که مهندس کیانی تو فیلماش استفاده کرده


private void button2_Click(object sender, EventArgs e)
{
//1-
string val = dataGridView1[0, dataGridView1.CurrentRow.Index].Value.ToString();
//2-
Book b = new Book();
b.ID = val;
b.GetOne();
//3-
frmBookEdit fe = new frmBookEdit();
//4-
fe.txtid.Text = b.ID;
fe.txtname.Text = b.Name;
fe.txtauthor.Text = b.Author;
fe.txtyear.Text = b.Year.ToString();
fe.txttranslator.Text = b.Translator;
fe.txtisbn.Text = b.ISBN;
fe.txtcount.Text = b.Count.ToString() ;

category cat = new category();
DataTable dtcat = cat.GetList();
fe.cbcategory.DisplayMember = "catname";
fe.cbcategory.ValueMember = "catid";
fe.cbcategory.DataSource = dtcat;
fe.cbcategory.SelectedValue = b.CategoryID;

Publisher pub = new Publisher();
DataTable dtpub = pub.GetList();
fe.cbpublisher.DisplayMember = "pname";
fe.cbpublisher.ValueMember = "pid";
fe.cbpublisher.DataSource = dtpub;
fe.cbpublisher.SelectedValue = b.PublisherID;


fe.ShowDialog();

cbcategory_SelectedIndexChanged(null, null);
}

مثلا این کد دکمه ویرایششه . از همین فرم اومده مقادیر فرم دیگه رو مقداردهی کرده و برای اینکه به مقادیر فرم دیگه دسترسی داشته باشه modifier تکست باکس ها رو روی public گذاشته. حالا به نظر شما این روش استاندارده؟؟؟؟

AmirHarirbafan
دوشنبه 19 مهر 1389, 23:21 عصر
احتمالا برای راحتی کارشون ، از این روش استفاده کردن. چون Public کردن modifier کنترلهای یک فرم، اساس OOP رو به هم میزنه.
فرض کنید من سه تا فرم دارم ، فرم 1 و 2 و 3 ، توی فرم 3 چند تا TextBox دارم که میخوام اطلاعات داخلشون تزریق بشه ، اگه TextBoxها رو Public کنم و از فرم 1 و 2 اونها رو پر کنم ، روش جالبی نیست ، چون درسته که الان نتیجه گرفتم ، اما ممکنه که یکی از TextBoxها به عنوان مثال ، مربوط به عدد ماه باشه (فقط عدد بین 1 تا 12 رو بتونن دریافت کنه) ، حالا من باید توی تمام فرم هایی که دارن به فرم 3 اطلاعات تزریق میکنند ، این شرط رو بزارم که عدد نباید بزرگتر از 12 یا کوچکتر از 1 باشه. در صورتی که اگه من از یک تابع جهت دریافت اطلاعات TextBoxها استفاده کرده بود ، فقط یکجا لازم بود که مقادیر رو چک کنم ، پس قابلیت اعتماد برنامه ام بالا میرفت