rahmatipoor
دوشنبه 01 شهریور 1395, 19:14 عصر
روش نوشتن برنامه نویسی سه لایه برای دوستانی که آشنایی ندارند (گفتم شاید به درد برخی دوستان بخوره )
توضیحات کلی برنامه نویسی چندلایه ( 3 لایه ) :
شما یک لایه ( کلاس ) طراحی میکنید به نام لایه DAL یا ارتباط با داده ها :
یک کلاس ایجاد میکنید و اسمش رو هرچی دوست داشتید میذارید. من اسمش رو clsAccessData گذاشتم.
توی این لایه کلاسهای کار با دیتابیس و کانکشن استرینگ و ... رو تعریف می کنید . این کلاس دو تا متد داره که هر دو از نوع Public هستند چون باید توی لایه های دیگه فراخوانی بشن.
یکی برای اجرای دستوراتی که Select هستند و یکی برای سایر دستورات غیر Select
اینطوری :
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
namespace Daftar_Rahnama
{
class clsAccessData
{
string ConStr = @"Data Source=.\SQLABRAR ; AttachDbFilename=" + Application.StartupPath
+ @"\Data\Daftar_Rahnama.mdf; Initial Catalog=Daftar_Rahnama; Integrated Security=True";
public DataView dv;
SqlConnection MyCn;
public clsAccessData()
{
MyCn = new SqlConnection(ConStr);
}
public void ExexuteSelectCommand(SqlCommand cmd)
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
dv = new DataView();
cmd.Connection = MyCn;
if (MyCn.State == ConnectionState.Closed)
{
MyCn.Open();
}
cmd.ExecuteNonQuery();
da.Fill(dt);
dv = dt.DefaultView;
MyCn.Close();
MyCn.Dispose();
}
//************************************************** ********************
public void ExexuteCommand(SqlCommand cmd)
{
cmd.Connection = MyCn;
if (MyCn.State == ConnectionState.Closed)
{
MyCn.Open();
}
cmd.ExecuteNonQuery();
MyCn.Close();
MyCn.Dispose();
}
}
}
خوبیش هم اینه که فقط یک بار نیازه کانکشن استرینگ و دستورات اتصال به بانک رو بنویسید و هر وقت خواستید تغییر بدید فقط همین یک جا تغییر میدید و اگه مطمئن باشید درست هستند دیگه خیالتون راحته که عیب کار جای دیگه است و خیلی راحت میتونید دیباگ کنید
حالا برای کارهای مشابه مثلا برای دفتر تلفن یک کلاس دیگه تعریف میکنید مثلا (clsTel) و توابع موردنیاز و کامندها رو اونجا می نویسید و و برای اجرا یک نمونه از کلاس DAL ایجاد میکنید و کامندها رو به اون پاس میدید تا اجرا کنه( به این لایه میگن BAL یا لایه منطق )
توی این لایه برای قسمتهای مختلف میتونید کلاسهای مختلف داشته باشید مثلا یک کلاس برای بک آپ و ریستور ، یک کلاس برای کار با دفتر تلفن و .... .
متدهایی هم که باید از لایه های دیگه فراخوانی بشن باید Public تعریف کنید
اینطوری :
نمونه دستورات Select :
public DataView SelectOneGroup(int GroupID)
{
SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = @"
SELECT GroupID, GroupName, Tozihat
FROM tblGroups
WHERE (GroupID = @GroupID)";
//
myCmd.Parameters.AddWithValue("@GroupID", GroupID);
//
clsAccessData dbAccess = new clsAccessData();
dbAccess.ExexuteSelectCommand(myCmd);
return dbAccess.dv;
}
نمونه دستورات غیر از Select که چند تا دستور اس کیو ال رو از طریق یک کامند اجرا میکنه ( دقت کنید که باید بین دستورات علامت ; بذارید ) :
public void DeleteGroup(int GroupID)
{
SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = @"
--حذف فايلهاي اعضا
DELETE FROM tblFile
WHERE (OzvID IN
(SELECT ID
FROM tblDaftarRahnam
WHERE (Parent_GroupID = @GroupID)));
--حذف اعضا
DELETE FROM tblDaftarRahnam
WHERE (Parent_GroupID = @GroupID);
--حذف گروه
DELETE FROM tblGroups
WHERE (GroupID = @GroupID)";
//
myCmd.Parameters.AddWithValue("@GroupID", GroupID);
//
clsAccessData dbAccess = new clsAccessData();
dbAccess.ExexuteCommand(myCmd);
}
توی فرمهاتون هم از کلاس CLsTel نمونه میسازید و متد موردنظرتون رو اجرا میکنید. به عنوان مثال:
ClsTel MyTel = new ClsTel
Mytel.DeleteGroup(5);
به این میگن برنامه نویسی چند لایه.
خیلی مزایا داره
مثلا شما خواستید برنامه تون رو تحت وب کنید دیگه نیاز نیست کل برنامه رو از نو بنویسید . فقط کافیه فرمهای تحت وب رو طراحی کنید و از متدهایی که قبلا نوشتید استفاده کنی ( یعنی فقط لایه فرمهاتون تغییر میکنه و بقیه لایه ها بدون هیچ تغییری استفاده میشن )
عیب یابی هم خیلی راحته. کدهاتون هم تمیز هستند
توضیحات کلی برنامه نویسی چندلایه ( 3 لایه ) :
شما یک لایه ( کلاس ) طراحی میکنید به نام لایه DAL یا ارتباط با داده ها :
یک کلاس ایجاد میکنید و اسمش رو هرچی دوست داشتید میذارید. من اسمش رو clsAccessData گذاشتم.
توی این لایه کلاسهای کار با دیتابیس و کانکشن استرینگ و ... رو تعریف می کنید . این کلاس دو تا متد داره که هر دو از نوع Public هستند چون باید توی لایه های دیگه فراخوانی بشن.
یکی برای اجرای دستوراتی که Select هستند و یکی برای سایر دستورات غیر Select
اینطوری :
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
namespace Daftar_Rahnama
{
class clsAccessData
{
string ConStr = @"Data Source=.\SQLABRAR ; AttachDbFilename=" + Application.StartupPath
+ @"\Data\Daftar_Rahnama.mdf; Initial Catalog=Daftar_Rahnama; Integrated Security=True";
public DataView dv;
SqlConnection MyCn;
public clsAccessData()
{
MyCn = new SqlConnection(ConStr);
}
public void ExexuteSelectCommand(SqlCommand cmd)
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
dv = new DataView();
cmd.Connection = MyCn;
if (MyCn.State == ConnectionState.Closed)
{
MyCn.Open();
}
cmd.ExecuteNonQuery();
da.Fill(dt);
dv = dt.DefaultView;
MyCn.Close();
MyCn.Dispose();
}
//************************************************** ********************
public void ExexuteCommand(SqlCommand cmd)
{
cmd.Connection = MyCn;
if (MyCn.State == ConnectionState.Closed)
{
MyCn.Open();
}
cmd.ExecuteNonQuery();
MyCn.Close();
MyCn.Dispose();
}
}
}
خوبیش هم اینه که فقط یک بار نیازه کانکشن استرینگ و دستورات اتصال به بانک رو بنویسید و هر وقت خواستید تغییر بدید فقط همین یک جا تغییر میدید و اگه مطمئن باشید درست هستند دیگه خیالتون راحته که عیب کار جای دیگه است و خیلی راحت میتونید دیباگ کنید
حالا برای کارهای مشابه مثلا برای دفتر تلفن یک کلاس دیگه تعریف میکنید مثلا (clsTel) و توابع موردنیاز و کامندها رو اونجا می نویسید و و برای اجرا یک نمونه از کلاس DAL ایجاد میکنید و کامندها رو به اون پاس میدید تا اجرا کنه( به این لایه میگن BAL یا لایه منطق )
توی این لایه برای قسمتهای مختلف میتونید کلاسهای مختلف داشته باشید مثلا یک کلاس برای بک آپ و ریستور ، یک کلاس برای کار با دفتر تلفن و .... .
متدهایی هم که باید از لایه های دیگه فراخوانی بشن باید Public تعریف کنید
اینطوری :
نمونه دستورات Select :
public DataView SelectOneGroup(int GroupID)
{
SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = @"
SELECT GroupID, GroupName, Tozihat
FROM tblGroups
WHERE (GroupID = @GroupID)";
//
myCmd.Parameters.AddWithValue("@GroupID", GroupID);
//
clsAccessData dbAccess = new clsAccessData();
dbAccess.ExexuteSelectCommand(myCmd);
return dbAccess.dv;
}
نمونه دستورات غیر از Select که چند تا دستور اس کیو ال رو از طریق یک کامند اجرا میکنه ( دقت کنید که باید بین دستورات علامت ; بذارید ) :
public void DeleteGroup(int GroupID)
{
SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = @"
--حذف فايلهاي اعضا
DELETE FROM tblFile
WHERE (OzvID IN
(SELECT ID
FROM tblDaftarRahnam
WHERE (Parent_GroupID = @GroupID)));
--حذف اعضا
DELETE FROM tblDaftarRahnam
WHERE (Parent_GroupID = @GroupID);
--حذف گروه
DELETE FROM tblGroups
WHERE (GroupID = @GroupID)";
//
myCmd.Parameters.AddWithValue("@GroupID", GroupID);
//
clsAccessData dbAccess = new clsAccessData();
dbAccess.ExexuteCommand(myCmd);
}
توی فرمهاتون هم از کلاس CLsTel نمونه میسازید و متد موردنظرتون رو اجرا میکنید. به عنوان مثال:
ClsTel MyTel = new ClsTel
Mytel.DeleteGroup(5);
به این میگن برنامه نویسی چند لایه.
خیلی مزایا داره
مثلا شما خواستید برنامه تون رو تحت وب کنید دیگه نیاز نیست کل برنامه رو از نو بنویسید . فقط کافیه فرمهای تحت وب رو طراحی کنید و از متدهایی که قبلا نوشتید استفاده کنی ( یعنی فقط لایه فرمهاتون تغییر میکنه و بقیه لایه ها بدون هیچ تغییری استفاده میشن )
عیب یابی هم خیلی راحته. کدهاتون هم تمیز هستند