csharpcollegian
Member
سلام وقت به خیر
دوستان من یک برنامه به صورت سه لایه نوشتم که یک قسمتش وظیفه انتشار و ثبت بن خرید برای کارمندان شرکت رو بر عهده داره
ثبت اطلاعات بن خرید به این صورت انجام میشه که اطلاعات در لایه نمایش (Presentation Layer) گرفته میشه و به لایه منطق تجاری (Business Logic Layer) ارسال میشه :
بعد در لایه منطق تجاری اطلاعات توسط لایه دسترسی به داده (Data Access Layer) در دیتابیس ثبت میشه :
برنامه باید قبل از ثبت بن خرید چک کنه که قبلا برای این کارمند بن خرید دیگه ای ثبت نشده باشه بعدش بن جدید رو ثبت کنه (هر کارمند فقط حق داشتن یک بن خرید در ماه رو داره)
من همیشه این جور شرط ها رو داخل لایه منطق تجاری و همون متد Insert پیاده سازی می کنم که زمانی که متد Insert در لایه نمایش صدا زده شد، تمامی شروط به صورت اتوماتیک چک بشن بعدش عمل Insert انجام بشه :
دلیلم واسه این کار اینه که اینجوری منطق اصلی برنامم در کلاس هام (لایه منطق تجاری) پیاده سازی میشه و دیگه در لایه نمایش درگیر مسائلی که مربوط به منطق برنامه هست نمیشم و فقط اعتبار سنجی انجام میدم
حالا سوالم از دوستان و اساتید محترم اینه که آیا این روشی که من به کار بردم(بررسی شروط در همان لایه منطق تجاری و متد Insert)، معماری سه لایه رو به صورت اصولی و صحیح پیاده می کنه و منطبق بر مفاهیم معماری سه لایه هست یا نه ؟
چون یکی از دوستان میگفت باید این شرط رو در همان لایه نمایش چک کنی، چون بررسی این شرط هم یه جور اعتبار سنجیه !
ولی از نظر من اینجوری لایه نمایش هم درگیر منطق برنامه میشه که درست نیست...!
دوستان ممنون میشم نظراتتون رو مطرح کنید
دوستان من یک برنامه به صورت سه لایه نوشتم که یک قسمتش وظیفه انتشار و ثبت بن خرید برای کارمندان شرکت رو بر عهده داره
ثبت اطلاعات بن خرید به این صورت انجام میشه که اطلاعات در لایه نمایش (Presentation Layer) گرفته میشه و به لایه منطق تجاری (Business Logic Layer) ارسال میشه :
PHP:
private void button1_Click(object sender, EventArgs e)
{
BonClass Obj = new BonClass();
Obj.PersonnelID = textBox1.Text;
Obj.Description = textBox2.Text;
.
.
.
Obj.Insert();
}
PHP:
class BonClass
{
DataAccessLayer DAL = new DataAccessLayer();
.
.
.
public void Insert()
{
SqlParameter personnelIDParam = new SqlParameter("@PersonnelID", this.PersonnelID);
SqlParameter descriptionParam = new SqlParameter("@Description", this.Description);
.
.
.
DAL.ExecuteCommand("procBonInsert", CommandType.StoredProcedure, personnelIDParam, descriptionParam, ...);
}
.
.
.
}
من همیشه این جور شرط ها رو داخل لایه منطق تجاری و همون متد Insert پیاده سازی می کنم که زمانی که متد Insert در لایه نمایش صدا زده شد، تمامی شروط به صورت اتوماتیک چک بشن بعدش عمل Insert انجام بشه :
PHP:
class BonClass
{
DataAccessLayer DAL = new DataAccessLayer();
.
.
.
public void Insert()
{
Checking Conditions //بررسی اینکه آیا قبلا بن خریدی برای کارمند ثبت شده یا نه
.
.
.
if(Conditions true)
{
SqlParameter personnelIDParam = new SqlParameter("@PersonnelID", this.PersonnelID);
SqlParameter descriptionParam = new SqlParameter("@Description", this.Description);
.
.
.
DAL.ExecuteCommand("procBonInsert", CommandType.StoredProcedure, personnelIDParam, descriptionParam, ...);
}
}
.
.
.
}
حالا سوالم از دوستان و اساتید محترم اینه که آیا این روشی که من به کار بردم(بررسی شروط در همان لایه منطق تجاری و متد Insert)، معماری سه لایه رو به صورت اصولی و صحیح پیاده می کنه و منطبق بر مفاهیم معماری سه لایه هست یا نه ؟
چون یکی از دوستان میگفت باید این شرط رو در همان لایه نمایش چک کنی، چون بررسی این شرط هم یه جور اعتبار سنجیه !
ولی از نظر من اینجوری لایه نمایش هم درگیر منطق برنامه میشه که درست نیست...!
دوستان ممنون میشم نظراتتون رو مطرح کنید