Rejnev
یک شنبه 27 دی 1388, 22:51 عصر
سلام
در معماری لایه ای برنامه معمولا از سه لایۀ Interface و BusinessLogic و DataAccess بهره میبره.
بحث ما بیشتر روی لایه DataAccess هست و قصد دارم اون رو به دو لایه تبدیل کنم.
علت این کار اینه که وظایف لایه ها هر چه بیشتر از هم متمایز شوند. و این تمایز باعث پیدایش لایه ای جدید میشه که در ادامه میارم.
مطمئن نیستم که قبلا هم این روش ارائه شده باشه اما طبق Search ای که زدم توی جامعه برنامه نویس نبود!
حالا شروع میکنیم
معمولا برای اجرای دستورات در لایه DataAccess متد ها ملزم به ایجاد و قطع اتصال با بانک،ایجاد دستور و اجرای آن و در نهایت در صورت لزوم برگرداندن خروجی مناسب به Logic هست.
با یک تغییر کوچک در لایه میتوانیم وظیفه ایجاد اتصال و اجرای دستور رو از وظایف این لایه جدا کرده و در لایه ای جدید به نام Database قرار بدیم.
پس بطور خلاصه ایجاد اتصال، اجرای یک دستور ارسالی و در صورت لزوم برگرداندن نتیجه حاصل از اجرا از وظایف این لایه است.
http://barnamenevis.org/forum/attachment.php?attachmentid=42713&stc=1&d=1263753959
اگر بخواهیم این لایه رو به شکل یک کلاس تعریف کنیم متدها و خصوصیات زیر رو خواهیم داشت
public class Database
{
static SqlDataAdapter da=new SqlDataAdapter("",Database.Connection());
static DataTable dt=new DataTable();
static SqlCommand cmd = new SqlCommand("", Database.Connection());
private static SqlConnection Connection()
{
string cnnString = "...";
SqlConnection cnn = new SqlConnection(cnnString);
return cnn;
}
public static int executeNone(string sql)
{
int count = 0;
cmd.CommandText = sql;
cmd.Connection.Open();
count = cmd.ExecuteNonQuery();
cmd.Connection.Close();
return count;
}
public static DataTable executeRead(string sql)
{
dt.Clear();
da.SelectCommand.CommandText = sql;
da.Fill(dt);
return dt;
}
}
متد Connection یک اتصال به بانک برمیگردونه
متد excuteNone یک رشته حاوی یک دستور sql گرفته و اجرا میکند و نتیجه عددی معادل تعداد رکوردهایی که تحت تاثیر قرار گرفته اند بر میگردونه. این متد برای اجرای دستورات تغییر در اطلاعات ساخته شده.
متد execute مانند متد قبل منتها جهت خواندن اطلاعات استفاده میشه و در قالب یک dataTable اطلاعات رو برمیگردونه.
متد ها از نوع static تعریف شدن تا در هنگام استفاده در لایه dataAccess نیازی به ساخت شیئ database نباشه.
حالا در لایه DataAccess در بدنه متدها کافیست یک دستور sql ایجاد کنیم و متد مورد نیاز برای اجرا شدن رو از کلاس database انتخاب کنیم.
با تشکر
در معماری لایه ای برنامه معمولا از سه لایۀ Interface و BusinessLogic و DataAccess بهره میبره.
بحث ما بیشتر روی لایه DataAccess هست و قصد دارم اون رو به دو لایه تبدیل کنم.
علت این کار اینه که وظایف لایه ها هر چه بیشتر از هم متمایز شوند. و این تمایز باعث پیدایش لایه ای جدید میشه که در ادامه میارم.
مطمئن نیستم که قبلا هم این روش ارائه شده باشه اما طبق Search ای که زدم توی جامعه برنامه نویس نبود!
حالا شروع میکنیم
معمولا برای اجرای دستورات در لایه DataAccess متد ها ملزم به ایجاد و قطع اتصال با بانک،ایجاد دستور و اجرای آن و در نهایت در صورت لزوم برگرداندن خروجی مناسب به Logic هست.
با یک تغییر کوچک در لایه میتوانیم وظیفه ایجاد اتصال و اجرای دستور رو از وظایف این لایه جدا کرده و در لایه ای جدید به نام Database قرار بدیم.
پس بطور خلاصه ایجاد اتصال، اجرای یک دستور ارسالی و در صورت لزوم برگرداندن نتیجه حاصل از اجرا از وظایف این لایه است.
http://barnamenevis.org/forum/attachment.php?attachmentid=42713&stc=1&d=1263753959
اگر بخواهیم این لایه رو به شکل یک کلاس تعریف کنیم متدها و خصوصیات زیر رو خواهیم داشت
public class Database
{
static SqlDataAdapter da=new SqlDataAdapter("",Database.Connection());
static DataTable dt=new DataTable();
static SqlCommand cmd = new SqlCommand("", Database.Connection());
private static SqlConnection Connection()
{
string cnnString = "...";
SqlConnection cnn = new SqlConnection(cnnString);
return cnn;
}
public static int executeNone(string sql)
{
int count = 0;
cmd.CommandText = sql;
cmd.Connection.Open();
count = cmd.ExecuteNonQuery();
cmd.Connection.Close();
return count;
}
public static DataTable executeRead(string sql)
{
dt.Clear();
da.SelectCommand.CommandText = sql;
da.Fill(dt);
return dt;
}
}
متد Connection یک اتصال به بانک برمیگردونه
متد excuteNone یک رشته حاوی یک دستور sql گرفته و اجرا میکند و نتیجه عددی معادل تعداد رکوردهایی که تحت تاثیر قرار گرفته اند بر میگردونه. این متد برای اجرای دستورات تغییر در اطلاعات ساخته شده.
متد execute مانند متد قبل منتها جهت خواندن اطلاعات استفاده میشه و در قالب یک dataTable اطلاعات رو برمیگردونه.
متد ها از نوع static تعریف شدن تا در هنگام استفاده در لایه dataAccess نیازی به ساخت شیئ database نباشه.
حالا در لایه DataAccess در بدنه متدها کافیست یک دستور sql ایجاد کنیم و متد مورد نیاز برای اجرا شدن رو از کلاس database انتخاب کنیم.
با تشکر