PDA

View Full Version : انتقال اطلاعات بین لایه ها در معماری سه لایه



csharpcollegian
پنج شنبه 23 اردیبهشت 1395, 13:18 عصر
سلام دوستان و اساتید محترم وقتتون به خیر
دوستان من برای انتقال اطلاعات از لایه UI به BLL و همچنین از BLL به DAL از یک دیتاتیبل استفاده می کنم. به این صورت که در لایه BLL ، داخل هر آبجکتی دیتاتیبل مخصوص خودش رو طراحی می کنم. دیتاتیبل رو در فیلدهای آبجکت تعریف و ساختار دقیق اون رو که منطبق بر ساختار جدول اون آبجکت در دیتابیس هست در سازنده مشخص می کنم :

class User_BLL
{
public DataTable dtUser;

public User_BLL()
{
dtUser = new DataTable();
DataColumn[] columns = {
new DataColumn("ID", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Phone", typeof(string))
};
dtUser.Columns.AddRange(columns);
}
.
. //Other Methods
.
}

سپس در لایه UI برای هر آبجکتی بخوام اطلاعات رو بفرستم، از دیتاتیبلی که در خود اون آبجکت تعریف شده و مخصوص همون آبجکت هست استفاده می کنم :

private void button1_Click(object sender, EventArgs e)
{
User_BLL userObj = new User_BLL();
DataRow userRow = userObj.dtUser.NewRow();

userRow["ID"] = (int)textBox1.Text;
userRow["Name"] = textBox2.Text;
userRow["phone"] = textBox3.Text;

userObj.dtUser.Rows.Add(userRow);
userObj.CreateUser();
}
به این صورت اطلاعات از لایه UI به وسیله دیتاتیبل به لایه BLL و از اونجام برای ثبت به لایه DAL ارسال میشه.
دوستان و اساتید محترم می خواستم بدونم که آیا این روشی که استفاده کردم درسته ؟
نظر شما چیه ؟
خیلی ممنونم

ژیار رحیمی
پنج شنبه 23 اردیبهشت 1395, 17:35 عصر
سلام
در سه لایه بهتره از object کمکی برای جابجایی داده ها بین لایه ها استفاده نکنی. داده ها رو بین لایه ها بدون دیتاتیبل انتقال بدی بهتره . در کلاس User_BLL شما از طریق متد اطلاعات رو از لایه UI دریافت کنی مناسب تره.بهتره property های User رو به صورت پارامتر به متد CreateUser ارسال کنی.

csharpcollegian
جمعه 24 اردیبهشت 1395, 06:04 صبح
سلام
در سه لایه بهتره از object کمکی برای جابجایی داده ها بین لایه ها استفاده نکنی. داده ها رو بین لایه ها بدون دیتاتیبل انتقال بدی بهتره . در کلاس User_BLL شما از طریق متد اطلاعات رو از لایه UI دریافت کنی مناسب تره.بهتره property های User رو به صورت پارامتر به متد CreateUser ارسال کنی.

سلام، با تشکر فراوان بابت پاسختون
در لایه DAL چطور ؟ در اون لایه هم اطلاعات رو با متد بگیرم ؟ اطلاعات رو از BAL با پارامتر بفرستم به متدهای DAL ? این بهترین راهه ؟
خیلی ممنونم

khokhan
جمعه 24 اردیبهشت 1395, 09:05 صبح
دوستان و اساتید محترم می خواستم بدونم که آیا این روشی که استفاده کردم درسته ؟
نظر شما چیه ؟
خیلی ممنونم

در این لینک چهار روش برتر انتقال داده بین لایه ای بیان شده http://www.codeproject.com/Articles/493389/Four-ways-of-passing-data-between-layers

اما به نظر من بهترینش استفاده از لیست هست چون کار انسجام بیشتری داره و تمیز تر در می اد:لبخند:

روشDTO (https://en.wikipedia.org/wiki/Data_transfer_object) (Data Transfer Object) هم روش بیشتر شناخته شده می باشد و از همه مشهورترهhttp://www.matlabsite.com/5966/three-layer-architecture-in-c-sharp.html

ali_md110
شنبه 25 اردیبهشت 1395, 20:20 عصر
سلام
روش شما اشکالی ندارد
ولی این سبک برنامه نویسی سنتی استفاده از دیتاست یا دیتاتیبل جای خودشو داده به روشهای زنده و جدیدتر
الگوههایی مانند mvvm و یا mvc و بکارگیری فریموورکهایی مثل ef سیتنکس زیباتر و بهتری به شما میده
و از این دابل کوتیشنها


new DataColumn("ID", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Phone", typeof(string))


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