به نام خدا
در این مقاله قصد دارم یک برنامه ساده توسط معماری لایه ای از ابتدا تا انتها پیاده سازی کنم.قبل از هر چیز به موارد زیر نیاز داریم:
-visual studio یکی از نسخه های 2003 به بعد
-یک موتور بانک اطلاعاتی SQL از هر نسخه ای (2000,2005,2008)(express,enterprise,…)امکانات فعلی برنامه شامل موارد زیر می شود-امکان Login کاربر-مشاهده یکسری اطلاعات در Grid View-امکان حذف اطلاعات از ردیف انتخاب شده در Grid View-امکان ویرایش ردیف انتخاب شده-جستجوی اطلاعات Grid View-ثبت یک رکورد جدید*این برنامه صرفا جنبه مثالی دارد و بهینه سازی و تکمیل کدها به خواننده واگذار شده است.*سورس برنامه به همراه فایل آموزش در نهایت ضمیمه خواهد شد.
هدف کلی معماری لایه ای تقسیم و دسته بندی کارها در قالب یک لایه است.در این معماری ما سه لایه Interface, Logic, DataAccess داریم.-لایه DataAccess وظیفه ارتباط برقرار کردن با بانک اطلاعاتی و اجرای دستوراتی که به آن میدهیم را دارد.-لایه Logic وظیفه ایجاد قوانین و منطق برنامه را دارد. مثلا در مثال اداره آموزش یک دانشجوی مشروطی نمیتواند بیش از 14 واحد درس انتخاب کند. بدیهی است که این قوانین در شرایط مختلف متفاوت است. در نتیجه این وظیفه لایه Logic است تا به عنوان مغز متفکر سیستم عمل کند.-لایه آخر Interface می باشد. این لایه مربوط به رابط کاربری برنامه است. طراحی فرم ها و گزارشات و ... در این لایه قرار می گیرد.با فرض این که خواننده با معماری لایه ای آشنایی دارد به ادامه مبحث می پردازیم.با توجه به امکاناتی که در بالا گفته شد جداول زیر متصور استجدول کاربران:-نام کاربر-رمز عبوریک جدول دلخواه دیگر مثلا جدول کالا:-کد کالا-نام کالا-کمپانی سازنده-قیمتدستورات زیر را برای ساخت دیتابیس و جداول بالا بکار بگیرید
Create database dataSample
go
use dataSample
go
Create table users
(
code smallint primary key identity(1,1),
name nvarchar(50) not null,
pass nvarchar(50) not null
)
go
Insert into users(name,pass)values('admin','1')
go
Create table product
(
code int primary key identity(1,1),
name nvarchar(50) not null,
company nvarchar(50),
price float not null
)
insert into product(name,company,price)values('Cpu','AMD',6000 0)
insert into product(name,company,price)values('Cpu','Intel',70 000)
insert into product(name,company,price)values('Graphic 9500','Geforce',80000)
insert into product(name,company,price)values('Ram 1GB','Kingmax',24000)
insert into product(name,company,price)values('Hard 500GB','Maxtor',54000)
*ادامه پروژه منوط به ساخت دیتابیس بالا می باشد. در نتیجه کافیست دیتابیس را به هر نحوی ایجاد کنید و موقتا یک کاربر به جدول کاربران و در صورت تمایل تعدادی کالا هم اضافه کنید.*به خاطر پیچیده نشدن و طولانی نشدن مقاله از ساخت view و SP و ... پرهیز می کنم.در پیاده سازی برنامه های چند لایه ای معمولا بجز لایه رابط کاربر سایر لایه ها بصورت کتابخانه های dll پیاده سازی می شوند.برای ساخت چنین برنامه هایی در محیط VS بصورت زیر عمل میکنیم:در محیط ویژوال استودیو یک پروژه Windows application ای با نام dataSample ایجاد میکنیم.بعد از ایجاد معمولا Visual studio یک فرم آماده به ما تحویل می دهد.
ساخت Login برای برنامه
در پنجره Solution Explorer نام فرم ایجاد شده را به frmLogin تغییر دهید.فرم Login را بصورت زیر طراحی میکنیم:
حالا یک فرم در لایه رابط ایجاد شد.ساخت سایر لایه ها:قرار است که کاربر رمز عبور خود را وارد کرده و بعد از زدن کلید ورود در صورت معتبر بودن رمز به صفحه اصلی منتقل شود.در نتیجه روال کار بطور کلی به صورت زیر خواهد بود:-رمز به یک تابع فرستاده میشود-یک کوئری نوشته شده که بر اساس آن از جدول کاربران شخصی انتخاب میشود که دارای رمز عبور وارده است.-در صورت وجود شخص، Login صورت میگیرد و در غیر این صورت پیغام مناسب نمایش داده میشود.از سناریوی بالا کارهای زیر استنباط میشود:-خواندن اطلاعات از دیتابیس (نوشتن کوئری)-تصمیم گیری بر طبق اطلاعات خوانده شده (کاربری وجود دارد یا خیر)-واکنش نهایی (منتقل شدن به فرم اصلی و یا پیغام خطا)حال با این دیدگاه لایه ای ایجاد میکنیم که تصمیم گیری را انجام دهد (Logic)در منوی File گزینه Add و سپس add new project را انتخاب میکنیم.
طبق تصویر پروژه را با نام Logic به Solution اضافه می کنیم. همانطور که میبینید این نوع از پروژه ها فایل DLL به عنوان خروجی تحویل میدهند.
در پنجره Solution Explorer در لایه Logic که هم اکنون ایجاد شد نام Class1 را به نام Business.cs تغییر دهید. بعد از تغییر نام پیغامی که ظاهر می شود را Yes کنید تا نام کلاسی که در داخل محتویات Class1 بود نیز تغییر پیدا کند.
حالا از آنجایی که هر لایه فقط میتواند با لایه پایین تر از خود در ارتباط باشد باید ارتباط لایه Interface را با لایه Logic برقرار کنیم. تصویر زیر را ملاحظه کنید:
یک Reference برای لایه رابط اضافه کردیم. Reference از میان Project های Solution انتخاب شده. با این کار در واقع گفتیم که لایه رابط تنها می تواند با لایه منطق ارتباط برقرار کند. حالا از درون لایه رابط میتوانیم توابع لایه منطق را فراخوانی کنیم.
در ادامه به سراغ بقیه کار خواهیم رفت