PDA

View Full Version : لایه چهارم در پرو‍ژه چند لایه



abadanboy
شنبه 20 بهمن 1386, 08:06 صبح
سلام این سوال رو نمی خواستم بپرسم چون می خواستم پرو‍ژه رو کامل کنم بعد کل پرو‍ژه رو بزارم اینجا.
آقا من یه لایه دیگه بعد از BLL دارم اضافه می کنم به اسم Mostafa حالا تو این لایه دیگه اومدم کارو به تمام معنا راحت کردم و مثلا دیگه برا پر کردن دیتاگرید تو لایه نمایش 1 خط بنویسی کافی هست مثلا

DTM.DataGridLoadMostafa(DataGrid1, "F_Load_Packet");
ولی یه مشکل اینجا هست اونم اینه که بخاطر اینکه نخوام تو هر پروژه لایه dal رو تغییر بدم میام اسم stored procedure
تو همین قسمت از برنامه نویس می گیرم.
می خوام بدونم این کار امنیت رو بخطر نمی ندازه که تو لایه نمایش من اسم stored procedure
(F_Load_Packet) میارم
یا اینکه مثلا برای آپدیت علاوه بر stored procedure آرایه object رو هم همین جا پر می کنم بجای dal مثلا

object[] OBJ = new object[2];
OBJ[0] = ViewState["PacketID"];
OBJ[1] = Name;

DTM.DataSetUpdateMostafa("F_Update_PacketByID",OBJ);
Response.Redirect("Default.aspx");
البته یه کار کردم اونم اینه که تو dal اول stored procedure یه رشته می زارم مثلا اسم stored procedure اینجا F_Load_Packet
تو دیتابیس یه mos_ اولش هست یعنی تو dal رشته جلوش اضافه می شه

Behrouz_Rad
شنبه 20 بهمن 1386, 09:37 صبح
وقتی چند لایه کد مینویسی باید تصور و درک دقیقی از وظایف هر لایه داشته باشی.
اگر لایه جدیدی اضافه می کنی و وظیفه ی خاصی رو به اون محول می کنی، فقط و فقط همون وظیفه رو باید انجام بده و نباید در کار بقیه ی لایه ها دخالت کنه.
مثلا اگر Property Layer اضافه می کنی، فقط و فقط باید در اون Property وجود داشته باشه نه مثلا متدی برای Redirect تحت شرایطی!
گرفتن داده های مورد نیاز DAL فقط و فقط باید در سطح Presentation Layer انجام بشه.
اینجور نمیشه گفت که چون من یا کسی که از برنامه استفاده می کنیم میخوایم راحت باشیم، وظایف Presentation Layer رو به BLL یا DAL منتقل می کنیم!
نام دهی به SP یکی از وظایفی هست که در سطح BLL انجام میشه.

این تقسیم وظایف ضمن افزایش خوانایی برنامه، تغییر بستر برنامه رو نیز از "وب" به "دسکتاپ" بسیار بسیار راحت تر می کنه چون تنها نیازمندی، نیاز به تغییر Presentation Layer هست و بس!

موفق باشید.

abadanboy
شنبه 20 بهمن 1386, 12:47 عصر
فکر کنم نتونستم درست بیان کنم اصلی ترین چیزی که من می خوام بدونم
1- آیا آوردن اسم SP در Presentation Layer از نظر امنیت درست هست یا نه ؟


نه مثلا متدی برای Redirect تحت شرایطی!


object[] OBJ = new object[2];
OBJ[0] = ViewState["PacketID"];
OBJ[1] = Name;

DTM.DataSetUpdateMostafa("F_Update_PacketByID",OBJ);
Response.Redirect("Default.aspx");
این Presentation Layer پروژه من هست

کلاً تقسیم بندی لایه پروژه من به صورت زیر هست
هدف از انجام اون هم اینه که من بخاطر هر پروژه مجبور نشم لایه DAL و BLL رو تغییر دهم
فقط Presentation Layer تغییر کنه.
این قسمت زیر کجاش ایراد داره و می تونه دچار مشکل بکنه مارو.

تو قسمت زیر روند حذف کردن یه رکورد رو تو دیتا گرید گفتم

این لایه Presentation Layer

protected void BtnDel_Click(object sender, EventArgs e)
{
DTM.DataGridDeleteMostafa(DataGrid1, "F_Delete_Packet", "CheckBox1");
Response.Redirect("Default.aspx");
}

این Datatools هست که خودم نوشتم (Mostafa Layer)


public void DataGridDeleteMostafa(DataGrid DG, string SP, string ChBox)
{
string DelID = "";
bool Check = false;
foreach (DataGridItem DGI in DG.Items)
{
CheckBox ch = (CheckBox)DGI.FindControl(ChBox);
if (ch.Checked)
{
Check = true;
DelID += DG.DataKeys[DGI.ItemIndex] + ",";
}
}
if (Check)
{
DTB.DatasetDeleteBLL(SP, DelID.Substring(0, DelID.LastIndexOf(",")));
}
}

این لایه BLL


public void DatasetDeleteBLL(string SP, string DelID)
{
DataToolsDAL DTD = new DataToolsDAL();
DTD.DatasetDeleteDAL(SP, DelID);
}

اینم DAL

public void DatasetDeleteDAL(string SP, string DelID)
{
object[] Del = new object[1];
Del[0] = DelID;
ExecuteCommand(SP, Del);
}

Behrouz_Rad
شنبه 20 بهمن 1386, 13:13 عصر
1- آیا آوردن اسم SP در Presentation Layer از نظر امنیت درست هست یا نه ؟


نام دهی به SP یکی از وظایفی هست که در سطح BLL انجام میشه.

همیشه یک پاسخ رو با دقت بخون.

موفق باشی.

پ.ن: وقتی اساسا سوالی غلط هست، جواب مستقیمی نداره!

abadanboy
شنبه 20 بهمن 1386, 13:29 عصر
همیشه یک پاسخ رو با دقت بخون.
مرسی بهروز جان من منظوره تو رو فهمیده بودم ولی می خواستم به همون جواب مستقیمه برسم که

پ.ن: وقتی اساسا سوالی غلط هست، جواب مستقیمی نداره!