PDA

View Full Version : سوال: معماری سه لایه



صباح فتحی
دوشنبه 12 مهر 1389, 12:54 عصر
سلام دوستان عزیز
من میخوام معماری سه لایه رو بایک مثال واسم توضیح بدید
چون میدونم خییلی مهمه
همین کدرو چطوری بامعماری 3لایه بنویسم

using (SqlConnection con = new SqlConnection(@"Server=SABAH-PC\SABAHSQL;DataBase=tempdb;Integrated Security=True"))
{
SqlCommand com = new SqlCommand("select name from tb where id=2", con);
if (con.State==ConnectionState.Closed)
{
con.Open();
}

SqlDataReader d;
d = com.ExecuteReader();
d.Read();
textBox1.Text = d["name"].ToString();
con.Close();
}

salehbagheri
دوشنبه 12 مهر 1389, 13:14 عصر
در اين مقاله به اختصار معماري سه لايه، توضيح داده شده است.
http://www.barnamenevis.org/forum/showthread.php?t=78333


همین کدرو چطوری بامعماری 3لایه بنویسم

معماري ربط چنداني به كد نداره، بلكه اين رعايت شئ گرايي و تميز نوشتن كد شماست كه ميتونه خيلي تغييرات در اون ايجاد كنه كه در اينجا قابل بحث نمي باشد.

صباح فتحی
دوشنبه 12 مهر 1389, 13:30 عصر
آقای باقری به نظرشما معماری چند لایه بهتره؟

اَرژنگ
دوشنبه 12 مهر 1389, 13:35 عصر
سلام دوستان عزیز
من میخوام معماری سه لایه رو بایک مثال واسم توضیح بدید
چون میدونم خییلی مهمه
همین کدرو چطوری بامعماری 3لایه بنویسم

using (SqlConnection con = new SqlConnection(@"Server=SABAH-PC\SABAHSQL;DataBase=tempdb;Integrated Security=True"))
{
SqlCommand com = new SqlCommand("select name from tb where id=2", con);
if (con.State==ConnectionState.Closed)
{
con.Open();
}

SqlDataReader d;
d = com.ExecuteReader();
d.Read();
textBox1.Text = d["name"].ToString();
con.Close();
}
در معماری ۳ لایه ما با موجودیتها Entities کار میکنیم.
گرفتن یک مقدار به تنهایی بی‌معنی است و به احتمال زیاد چیزی که باید اول باید پیاده و بیان بشد یک موجودیت است. من در ۲ توپیک که شروع کردم جواب این گونه مشکلات را نشان میدم.
جواب این یک سوال یک کلاس و یا یک متد نیست، باید با یک دید با گسترش بزرگ به جواب این نوع سوالات رسید. اگر در هر کدام از گفتگوهایه جدید که ایجاد کردم در زمانی که صلاح بدونید این سوال را بپرسید جواب کامل را قابل دسترسی قرار میدم.

علیرضا مداح
دوشنبه 12 مهر 1389, 14:53 عصر
سلام،
ببینید دوستان، بحث معماری چند لایه یا Multi-Tier یا Multi-Layer یا ... امروزه بسیار داغ شده است و همه در این رابطه سوال دارند، اما توجه کنید که سوال کردن بدین شکل شما را عملا" به "هیچ جا" نخواهد رساند،
این مفهوم، یک مفهوم بسیار کلی هست، و اینکه شما بخواهید آن را با سوال و جواب در این جا یاد بگیرید عملا" غیر ممکن است،
درک عمیق این موضوع نیازمند درک عمیق OOP و Design Pattern های موجود و بررسی معماری های گوناگونی که بر این اساس ایجاد شده اند و نیز تجربه، امکان پذیر است،
پس پیشنهاد من به شما این است که در ابتدا در این رابطه در اینترنت جستجو کنید، مقاله های متنوع زیادی را مطالعه کنید، به سایت هایی نظیر CodePlex سر بزنید و نمونه های موجود در آن ها را بررسی کنید، برای خودتان یک پروژه ی تستی ایجاد کرده و شروع به کار کنید، آن وقت "بدون شک" در حین کار به مسائلی بر می خورید که نیاز به کمک دارید، آن زمان بنده و دیگر دوستان برای راهنمایی در خدمت شما خواهیم بود،/

k1csharpdeveloper
دوشنبه 12 مهر 1389, 14:59 عصر
AL(Data Access Layer)

اتصال به دیتابيس
خود برقرار کنيد که همانطور که گفتم دیتا بيس ما از DB در اینجا باید شما یک اتصال به
هم استفاده ميکنيم..... SQL-Server است و از 2005 Northwind
Server کليک کرده و در قسمت Add New Connection روی Server Explorer در پنجره
پایگاه Select Or enter database name نام سرور خود را وارد کنيد ور قسمت Name
کليک کرده تا از اتصال Test connection را وارد کنيد برای اطمينان روی Northwind داده
خود اطمينان داشته باشيد .
DAL(data access layer) مفهوم
وقتی شما از لایه بندی در پروژه خود استفاده نميکنيد شما تمام کارهایتان در لایه
ASP.NET همان صفحات Presentation انجام می دهيد . منظور از لایه presentation
قرار می دهيد که presentation را داخل لایه DAL هستند . ادر واقع شما با این کار لایه
این کار مشکلات خاص خود را دارد که عمده ترین این مشکلات به ترتيب زیر است :
را انجام ميدهد برای تمام این 10 DB -1 اگر شما 10 صفحه داشته باشد که کار با
را بنویسيد DB صفحه باید کدهای مربوط به
-2 تغييرات مشکل است . مثلا فرض کينيد بنا به دلایلی نام یک جدول عوض ميشود
تصور کنيد که این تغيير چقدر شما را عذاب می دهد
البته مشکلات یک لایه کار کردن به اینجا ختم نميشود ولی خوب خودتان دنبال این
مشکلات بروید :چشمک:
را از هم جدا کنيد. DAL و Presentation برای رفع این مشکلات شما باید لایه
هستند مثل توابعی که کار Data Source تام کدهایی که به مشخص در زیر
DAL باشد پس یه طور کلی DAL را انجام ميدهند باید در لایه .... Delete و Insert,Update
مورد نياز است. DB حاوی متدهایی است که برای کار با
ما DAL وجود دارد در Categories و Products بطور مثال در پایگاه داده ما جدولی یه نام
متدهای با ویژگی و نامهای زیر وجود دارد (البته بخش از متدها در اینجا آورده شده است)
که اطلاعاتی درباره تمام طبقه بندی محصولات ميدهد. GetCategories()-1
اطلاعاتی درباره تمام محصولات را ميدهد. GetProducts()-2
GetProductByCategorieID(categorieID)-3
مورد نظر را اجرا کرده و Query وصل شده و DB این متده وقتی فراخوانی ميشوند به
نوع) = type) نتيجه را برمی گرداند. البته نوع این نتجه برگشت داده شده مهم است
باشد.اما مطلوب ان است که DataReader ساده یا یک DataSet .این نوع ميتواند یک
استفاده کند strongly-typed objects نتيجه برگشتی از
.
نوع داده ای است که شمای آن قبل کمپایل معلوم : strongly-typed objects
باشد
این نوع داده قيل از زمان کامپایل و اجرا شمایش : loosely-typed object
معلوم نيست.
هستند و loosely-typed object معمولی یک DataSet و DataReader به طور مثال
باید از loosely-typed DataTable برای دسترسی به یک ستون مشخص از یک
زیر استفاده کرد Syntax
DataTable.Rows[index]["columnName"]
Syntax باید از strongly-typed DataTable ولی برای دسترسی به یک ستون مشخص از
زیر استفاده کرد
DataTable.Rows[index].columnName
ميتونيد خودتان یک کلاس تعریف کنيد و بطور strongly-typed object برای داشتن یک
خاص تمام مفاهيم گفته شده را پياده سازی کنيد اما را آسانتری نيز وجود دارد که آنهم
درست کنيد که خاصيتهای بالا را داشته باشد . Typed DataSet این است که
ونحوه قرار گرفتن آن در لایه های ما است . DAL در آخر هم این تصویر
typed DataSet توضيح درباره
ساخته ميشود و شما نياز به کد Visual studio برای شما به وسيله Typed DataSet
زیاد DataSet ،VS نوشتن اضافی ندارید البته شاید این تصور راکنيد که در ورژن قبلی
خيلی کار شده است اگر تا آخر این تاپيک DataSet جالب نبودند ولی در ورژن 2005 روی
typed همراه ما باشيد ميبينيد چه امکانات جالبی در اختيار برنامه نویس ميگذارد .یک
و همچينين DataTable,DataRow خودش تشکيل شده از کلاسهایی مانند DataSet
است که کار TableAdapter چيزی که اضافه شده در دیتا ست جدید کلاسی به نام
ورژن قبلی را انجام ميدهد ولی با شرایطی متفاوت که خود مشاهده Adapter همان
ميکنيد.
بکار می رود (معادل strongly -typed collection of data مثل Typed DataSet یک
که هر strongly-typed DataTable فارسی پيدا نکردم) . آنها ترکيب نمونه هایی از
هستند . ما برای هر جدول در strongly-type DataRow کدام از این نکنونه ها حاوی
strongly-typed DataTable دیتا بيس که ميخواهيم روی این جداول کار کنيم یک
ميسازیم. products ميسازیم . در ایجا ما برای جدول
حاوی هيج گونه اطلاعاتی برای دستيابی strongly-typed DataTable : توجه
strongly-typed به دیتاهای درون جدول متناظر خود نيست ( بطور ساده مثلا
دیتا یبس ساخته ایم نميداند چگونه دیتا از products که برای جدول DataTable
ميشود). برای بازیابی دیتا از strongly-typed DataTable دیتابيس وارد این
استفاده ميشود . TableAdapter از dataTable دیتابيس و پرکردن
حاوی متد هایی TableAdapter ، products DataTable به طور مثال برای
است که کار پر کردن دیتا تيبل ما را انجام می دهد نمونه ای از متد ها عبارتند
از
GetProducts()
GetProductByCategoryID(categoryID)
صدا زده ميشوند presentation متدها از لایه

صباح فتحی
دوشنبه 12 مهر 1389, 17:46 عصر
سلام،
ببینید دوستان، بحث معماری چند لایه یا Multi-Tier یا Multi-Layer یا ... امروزه بسیار داغ شده است و همه در این رابطه سوال دارند، اما توجه کنید که سوال کردن بدین شکل شما را عملا" به "هیچ جا" نخواهد رساند،
این مفهوم، یک مفهوم بسیار کلی هست، و اینکه شما بخواهید آن را با سوال و جواب در این جا یاد بگیرید عملا" غیر ممکن است،
درک عمیق این موضوع نیازمند درک عمیق OOP و Design Pattern های موجود و بررسی معماری های گوناگونی که بر این اساس ایجاد شده اند و نیز تجربه، امکان پذیر است،
پس پیشنهاد من به شما این است که در ابتدا در این رابطه در اینترنت جستجو کنید، مقاله های متنوع زیادی را مطالعه کنید، به سایت هایی نظیر CodePlex سر بزنید و نمونه های موجود در آن ها را بررسی کنید، برای خودتان یک پروژه ی تستی ایجاد کرده و شروع به کار کنید، آن وقت "بدون شک" در حین کار به مسائلی بر می خورید که نیاز به کمک دارید، آن زمان بنده و دیگر دوستان برای راهنمایی در خدمت شما خواهیم بود،/
سلام
مرسی از نظرقشنگتون آقای مداح
من خودم تصمیم گرفتم یک برنامه مدیریت ددیتابیس(درج حذف اضافه) روبااستفاده از معماری
سه لایه درست کنم و اگه مشکل و نظری داشتم توی همین تاپیک مطرح میکنم و خوشحال میشم شماو سایردوستانی حرفه ای نظیر آقای آرژنگ و... دربهبود برنامه مرایاری کنند ..ممنون از همتون:بوس:

صباح فتحی
سه شنبه 13 مهر 1389, 17:58 عصر
میگم من گیرکردم:لبخند:
حداقل pdf ی دارید بزارید یا منو توی نوشتن این برنامه ساده کمک کنیددیگه:لبخند:

salehbagheri
سه شنبه 13 مهر 1389, 20:59 عصر
به نكته زير توجه كرديد؟

این مفهوم، یک مفهوم بسیار کلی هست، و اینکه شما بخواهید آن را با سوال و جواب در این جا یاد بگیرید عملا" غیر ممکن است،
درک عمیق این موضوع نیازمند درک عمیق OOP و Design Pattern های موجود و بررسی معماری های گوناگونی که بر این اساس ایجاد شده اند و نیز تجربه، امکان پذیر است،

آيا شما OOP رو مسلط هستيد؟ Design Pattern ميدونيد چيه؟ توصيه ميكنم ابتدا با اين موارد به خوبي آشنا بشيد و بعد از اون معماري چند لايه رو بر روي كدهاتون پياده سازي كنيد. اگه بلد هستيد همون مقاله اي كه در پست اولم گذاشتم بخونيد.

اين نكته حكيمانه رو هم هميشه به ياد داشته باشيد:
پله پله تا ملاقات خدا ...

صباح فتحی
سه شنبه 13 مهر 1389, 21:19 عصر
به نكته زير توجه كرديد؟


آيا شما OOP رو مسلط هستيد؟ Design Pattern ميدونيد چيه؟ توصيه ميكنم ابتدا با اين موارد به خوبي آشنا بشيد و بعد از اون معماري چند لايه رو بر روي كدهاتون پياده سازي كنيد. اگه بلد هستيد همون مقاله اي كه در پست اولم گذاشتم بخونيد.

اين نكته حكيمانه رو هم هميشه به ياد داشته باشيد:
پله پله تا ملاقات خدا ...
اون مقاله که گذاشتید خوبه اما یکی جم و جورتر در قالب پی دی اف هم باشه خیلی خوبه:لبخندساده: