# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > مقالات مرتبط با Microsoft .Net Framework >  مقاله : برنامه چندلایه چیست ؟

## rtech

با توجه به اینکه دیدم خیلی از دوستان در این مورد سوال دارند دلم نیومد این مقاله ارزشمند رو اینجا نزارم :

در معماری چند لایه تمام برنامه به چندین بخش تقسیم می‌شود. این بخش‌ها می‌توانند فیزیکی یا منطقی باشند. هر بخش کار خاصی را انجام می‌دهد مثلا نمایش interface کاربر یا دسترسی به داد‌ه‌ها. برنامه می‌تواند به هر تعداد لایه داشته باشد ولی به هر حال بیش‌تر برنامه‌ها سه لایه‌ی مجزا دارند که عبارت‌اند از:


 Presentation Layer
 Business Logic Layer
 Data Access Layer

همان‌طور که احتمالا حدس زده‌اید، لایه‌ی Presentation چیزی نیست به جز بخشی از نرم‌افزار که با کاربر برنامه‌ی شما ارتباط برقرار می‌کند (interface برنامه‌ی شماست). نمایش داده‌ها به کاربر نهایی و اجازه به آنان برای ارتباط داشتن با داده‌ها، اصلی‌ترین وظیفه‌ی این لایه است.

در بیش‌تر موارد، داده‌هایی که توسط کاربر وارد می‌شوند نیاز به اعتبارسنجی یا پردازش اضافی دارند. این مسؤولیت لایه‌ی Business Logic است.

در نهایت داده‌های برنامه‌ی شما نیاز به ذخیره و بازیابی از طریق یک انبار داده دارند (مثلا سیستم مدیریت DataBaseهای رابطه‌ای یا RDBMS و یا XML و ...) این وظیفه توسط لایه‌ی دسترسی به داده انجام می‌شود.

به‌طور خلاصه، فرایند مورد نظر ما این‌گونه کار می‌کند:

- کاربر برای داده‌های برنامه، درخواستی ارسال می‌کند.

- لایه‌ی Data Access داده‌های مورد نظر را بازیابی می‌کند و از طریق لایه‌ی Business Logic آن‌ها را به لایه‌ی نمایش می‌فرستد. بعضی مواقع لایه‌ی دسترسی به داده‌ها، این داده‌ها را مستقیما به لایه‌ی نمایش ارسال می‌کند.

- لایه‌ی نمایش اطلاعاتی که باید نمایش داده شوند را از طریق لایه‌ی Business Logic دریافت می‌کند.

- کاربر داده‌ها را تغییر می‌دهد و عمل مناسب در مورد آن‌ها را اجرا می‌کند (مثل اضافه یا به‌روز کردن داده‌ها)

- لایه‌ی Business Logic صحت داده‌های وارد شده توسط کاربر را بررسی می‌کند (داده‌ها را اعتبارسنجی می‌کند)

- اگر داده‌ها معتبر باشند آن‌ها را برای به‌روز رسانی در بانک اطلاعاتی به‌دست لایه‌ی دسترسی به داده می‌سپارد.



*مزیت‌های برنامه‌های چند لایه*

- برنامه‌ها به چند بخش منطقی جدا از هم تقسیم می‌شوند و اتصال میان UI (رابط کاربری)، پردازش‌ها و بانک اطلاعاتی کم می‌شود.

- تغییر در بانک اطلاعاتی یا روال‌های دسترسی به داده‌ها، تاثیری در لایه‌ی نمایش یا برنامه‌ی کلاینت نخواهد گذاشت.

- برنامه‌ی کلاینت با عبارات SQL آمیخته نخواهد شد.

- نام جداول و ستون‌ها به‌طور مؤثری از برنامه‌ی Client حذف می‌شوند.

- برنامه‌ی Client نمی‌فهمد که داده‌ها از کجا آمده‌اند (چیزی که به آن Location Transparency گفته می‌شود)

- تغییر یا گسترش برنامه بسیار ساده‌تر خواهد شد، بدون نیاز به تغییر یا کامپایل مجدد برنامه‌ی Client.

نکته‌ی منفی در معماری چند لایه این است که شما باید تعداد زیادی بخش‌ها و کلاس‌های ازهم جدا در نرم‌افزار بسازید. اما به هر حال مزایای این روش بیش‌تر و برتر از معایب آن است.



*انتخاب‌های لایه‌ی Presentation*

دو انتخاب اصلی برای ساخت یک لایه‌ی نمایش در دات نت وجود دارد. آن‌ها فرم‌های ویندوزی یا فرم‌های وبی ASP.NET هستند.

با استفاده از ویندوز فرم‌ها شما می‌توانید برنامه‌های دسکتاپ فرم محور (Form Base) معمول را بسازید. برنامه‌های ویندوز فرمی می‌توانند المان‌های رابط کاربری بسیار غنی به‌کاربر پیشنهاد کنند. آن‌ها کم و بیش شبیه به فرم‌های ویژوال بیسیک هستند.

جذاب‌ترین گزینه برای توسعه‌ی لایه‌ی نمایش استفاده از وب فرم‌های ASP.NET است. کنترل‌هایی مثل: دیتاگرید، دیتالیست و تقویم (Calendar) یک رابط کاربری قدرتمند را با مقدار کمی کد فراهم می‌کنند.

انتخاب‌هایی که در بالا برای ساخت یک لایه‌ی نمایش بررسی کردیم می‌توانند توسط زبان‌های مختلفی مثل C#‎Visual Studio.Net پیاده‌سازی شوند.


*انتخاب‌های لایه‌ی Business Logic*

لایه‌ی Business Logic از چندین بخش که کارهایی نظیر اعتبار سنجی کار، گردش کار یا کارهای مشابه را انجام می‌دهند تشکیل شده است.

Componentهای .Net این لایه را شکل می‌دهند. شما می‌توانید با Interop از Componentهای COM استفاده کنید ولی این کار کارایی را پایین خواهد آورد.

وب‌سرویس‌های ASP.NET هم می‌توانند به‌عنوان یک Business Logic عمل کنند. اما به هر حال آن‌ها را نمی‌توان در همه‌ی شرایط به‌عنوان جایگزین Componentها به‌کار برد. وب‌سرویس‌ها تنها زمانی قابل استفاده خواهند بود که اعتبارسنجی در جایی بیرون از شبکه‌ی شما اتفاق افتاده باشد.

Componentهایی که توسعه می‌دهید به ماندن روی ماشین‌های مشابه نیازی ندارند. با استفاده از دات NET Remoting می‌توانید آن‌ها را روی چندین ماشین توزیع کنید.


*انتخاب‌های لایه‌ی Data Access*

این لایه با دستکاری داده‌ها مثل اضافه، حذف و به‌روز رسانی آن‌ها سر و کار دارد. داده‌هایی که به آن‌ها اشاره کردیم می‌توانند در RDBMS یا XML قرار داشته باشند. شما باید لایه‌ی دسترسی به داده را چنان طراحی کنید که دیگر لایه‌ها نیازی به دانستن وضعیت انبار داده‌ها نداشته باشند.

ADO.NET فناوری دسترسی به داده‌ی تحت دات .Net است. اگر چه ADO.NET از طریق کلاس‌های DataReader اجازه‌ی دسترسی به داده‌های در هنگام اتصال را می‌دهد ولی بیش‌ترین تمرکز روی دسترسی به داده‌ها در زمان متصل نبودن است. DataSet نقش کلیدی را در این مورد بازی می‌کند. در بعضی موارد می‌توانید ADO را هم برای دسترسی به داده‌ها استفاده کنید ولی استفاده از آن باید دلیل معتبری داشته باشد. از ADO استفاده نکنید فقط به خاطر این‌که RecordSetها را دوست دارید!

این‌جا هم Componentهای .Net لایه را تشکیل می‌دهند. همان‌طور که قبلا گفته شد می‌توانید از Componentهای کلاسیک COM هم استفاده کنید.

هم‌چنین وب‌سرویس‌ها هم می‌توانند لایه‌ی دسترسی به داده را شکل دهند. این مخصوصا زمانی درست است که DataBase شما فراهم‌کننده‌ی (Provider) داده ندارد. در این‌گونه موارد شما می‌توانید مقداری کد برای اتصال به داده‌ها و پر کردن DataBaseها و بازگرداندن نتایج درون DataSet به درخواست‌کننده‌ی داده بنویسید.

علاوه بر ADO.NET شما می‌توانید از امکانات سیستم مدیریت DataBase خود مثل توابع و یا روال‌های ذخیره شده (Stored Procedures) استفاده کنید.


*
ارسال داده از یک لایه به لایه‌ی دیگر*

در تمام موارد به ارسال اطلاعات از یک لایه به لایه‌ی دیگر نیاز است؛ به‌طور معمول برنامه‌نویسان از رشته‌ها، آرایه‌ها، RecordSetهای غیرمتصل برای رسیدن به این هدف استفاده می‌کنند. در .Net ، DataSetها یک راه فوق‌العاده برای انتقال اطلاعات میان لایه‌ها فراهم می‌کنند. شما حتی می‌توانید با برنامه‌نویسی یک DataSet بسازید و آن را با داده‌های خودتان پر کنید. اگر اشیا را خیلی دوست دارید می‌توانید از Typed DataSets استفاده کنید که در واقع کلاسی مشتق شده از کلاس DataSet است که جداول و سطرها را به شکل یک شی معرفی می‌کند.



منبع :رشد

----------


## cactuskhan

مقاله و پروژه در باره برنامه نویسی چندلایه خیلی زیاده پیدا میشه ! هم فارسی هم لاتین ! (نمونش هم تو سایت هست )
ولی مشکلی اینجاست که من تا به حال هر دوی این ها رو یعنی هم پروژه و هم توضیح کامل اون رو یکجا ندیدم ! 
دوستان اگه سراغ دارن معرفی کنن ! لاتین هم باشه موردی نداره !

----------


## rtech

یک پروژه چندلایه رو که یکی از دوستان در بخش asp.net  معرفی کردند که میتونید از اون استفاده کنید

----------


## peymannaji

سلام . ممنون از مقالتون ...

من میخوام بدونم که کاری که میکنم بفرض در یک برنامه ای که یک فیلد داره که طرف اسمشو وارد میکنه و یک دکمه داره که ذخیره در دیتا بیس انجام میشه ، برنامه نویسی لایه ای هست یا خیر :

اول - اینتر فیس برنامه که در همون قسمت طراحی دات نت ساخته میشه 
دوم - دستورات و کامپونت هایی که با درگ کردن از قسمت کامپونت ها میندازم رو صفحه( یک تکست باکس + یک دکمه + ولیدیتور ) و برای هر کدوم کد مینویسم  و مقادیری که کاربرا وارد میکنن رو کنترل میکنم و پاسشون میدم به دیتا بیس  .
سوم - ذخیره در دیتا بیس رو بصورت استورپرسیجر نوشتم .

پس روند کار به اینصورته که از رابط کاربری ( اینترفیس ) فرد نامشو میزنه ( Presentation Layer)
و بعدش کدهایی که نوشتم مقدار تکست باکس رو چک میکنه و اون رو میفرسته به سمت بانک (  Business Logic Layer)   و مقداری که به استور پروسیجر پاس  شده با دستور اینسرت که در پرسیجر نوشتم وارد بانک میشه (   Data Access Layer)  

آیا اینی که گفتم میشه برنامه نویسی 3 لایه ؟   چیزی که از نوشته هاتون فهمیدم این بو د ...
خوب در اینجا هم من 3 بخشی که گفتید رو دارم  .... منتظر جوابتون هستم  

با تشکر ....

----------


## babak_delphi

در برنامه نویسی چند لایه بخشهای مربوط به دسترسی به پایگاه داده ها کاملا مستقل است و کلاینت ها به صورت منطقی به اون وصل می شوند
برنامه های کلاینت اطلاعی از نحوه دسترسی به پایگاه داده و نحوه بازیابی اطلاعات ندارند
ولی برنامه ای که شما نوشتید یک برنامه معمولیه نه چند لایه 
چون همه اون قسمتها توی یک سیستم هستند و اگر بخواهید که چند نسخه از این برنامه رو داشته باشید باید همهِ اون قسمتها رو روی تک تک سیستمها تکرار کنی یا نهایتا در حالت Client/Servet میتونی دیتابیس رو روی سرور قرار بدی ولی باز باید لایه میانی رو روی تک تک کلاینت ها تکرار کنی ولی در روش چند لایه ، لایه میانی هم مثل Data Access Layer روی یک سیستم مجزا قرار داره و هر چند تا کلاینت هم که باشه شما فقط یک لایه میانی برای همهء اونها دارید که البته میتونه یک گره فیزیکی باشه (یعنی روی یک سیستم مجزا) یا یک گره منطقی (یعنی روی همون سیستمی که Data Access Layer روی اون قرار داره) که در حالت اول سه گره فیزیکی و سه گره منطقی دارید و در حالت دوم دو گره فیزیکی و سه گره منطقی

امیدوارم مفید واقع شده باشه.

----------


## arashkey

می شه لطفا بیشتر توضیح بدید 
من در مورد این معماری سه سطحی خیلی تو سایت خوندم ، ولی توضیح زیادی در موردش ندیدم،   توضیحات دوستمون هم زیاد جالب نبود . بیشتر گیجم کرد
می شه یکم بیشتر توضیح بدید و یا لینک بدید

----------


## teshnehab

> مقاله و پروژه در باره برنامه نویسی چندلایه خیلی زیاده پیدا میشه ! هم فارسی هم لاتین ! (نمونش هم تو سایت هست )
> ولی مشکلی اینجاست که من تا به حال هر دوی این ها رو یعنی هم پروژه و هم توضیح کامل اون رو یکجا ندیدم ! 
> دوستان اگه سراغ دارن معرفی کنن ! لاتین هم باشه موردی نداره !


سلام
من هم همين مشكل رو دارم. پروژه برنامه نويسي 3 لايه با آموزش مرحله به مرحله باشه.
البته نمونه كد كوچك براي راهنمايي و راه افتادن.
لطفا با آدرس، لينك يا سايت معرفي كنيد.
با تشكر

----------


## شاپرک

وقتی بحث برنامه نویسی چند لایه پیش میاد همه مقاله سایت رشد رو میذارن یا لینک میدن ... 
تو رو خدا دیگه بسه ... توی همین سایت برنامه نویس چندین بار این مقاله Copy و Paste شده .
 بخدا ما مفهومش رو فهمیدیم فقط میخوایم یه نمونه کوچیک با توضیح ببینیم .
یه نفر بیاد به زبون ساده و همراه با یک نمونه ساده این موضوع رو توضیح بده ... جای دوری نمیره ! 
همه هم دعاتون میکنن .

منتظریم

----------


## peymannaji

من با شاپرک موافقم . متاسفانه با هر کسی که صحبت میکنم هر کس یک درکی از این موضوع داره و واقعیت امر اینکه اکثریت نمیدونیم این موضوعی که همیشه در حد یک تئوری بیان میشه در عمل به چه صوورت پیاده سازی میشه ...

----------


## احمد سامعی

مي شه دوستان يك برنامه ساده با #C  بزارن...

 من برنامه هام را اينجوري مي نويسم ببينيد اين برنامه چند لايه مي شه يا نه ؟ و اشكالش كجاست ؟

اول يك پرژه  Windows Forms Application  مي سازم تا با كاربر ارتباط برقرار كنه
بعد يك پرژه Class Library اضافه مي كنم  كه يك dll. مي شه و از داخل اون به بانكم دسترسي دارم و اينزرت و آپديت... انجام مي دم ( و ممكن اين dll.  ها چندتا باشه هر كدوم واسه يك كار با ديتا بيس) 
و از داخل برنامه اصلي داده ها به اين dll.  ها پاس مي دم يا ازشون اطلاعات رو دريافت مي كنم و براي راهتي كار توابع داخل  dll. ها رو هم  static  مي نويسم

----------


## ohh_mid

> مي شه دوستان يك برنامه ساده با #C  بزارن...
> 
>  من برنامه هام را اينجوري مي نويسم ببينيد اين برنامه چند لايه مي شه يا نه ؟ و اشكالش كجاست ؟
> 
> اول يك پرژه  Windows Forms Application  مي سازم تا با كاربر ارتباط برقرار كنه
> بعد يك پرژه Class Library اضافه مي كنم  كه يك dll. مي شه و از داخل اون به بانكم دسترسي دارم و اينزرت و آپديت... انجام مي دم ( و ممكن اين dll.  ها چندتا باشه هر كدوم واسه يك كار با ديتا بيس) 
> و از داخل برنامه اصلي داده ها به اين dll.  ها پاس مي دم يا ازشون اطلاعات رو دريافت مي كنم و براي راهتي كار توابع داخل  dll. ها رو هم  static  مي نويسم


سلام 
من فکر می کنم یکی از مزایای مهم برنامه چند لایه این باشه که به راحتی بشه لایه UI رو تغییر داد . اما این کاری که شما انجام دادی از لایه Business خبری نیست 
به فرض می خوایم برنامه شما رو به Web تغییر بدیم مجبوریم خیلی از کارها رو مجددا انجام داد . 
در مورد static گرفتن متد ها هم نمی تونم چیزی بگم . ولی static گرفتن یک متد ربطی به معماری چند لایه نداره . 

برای اینکه بشه یه سمپل گذاشت از دوستان خواهش می کنم با هم همکاری کنیم و یه سمپل تهیه کنیم . 
سمپل می تونه از یه برنامه ساده باشه برای اینکه حرف بالا رو هم به صورت عملی ببینیم به هر دوصورت وب و ویندوز پیاده سازی کنیم . 
 مدیریت 
کاری هم که انجام بدیم این باشه که یه فرم برای ثبت داشته باشیم (فرم ساده ) 
اطلاعات ثبت شده رو در یک گرید نمایش می دیم 
فرمی هم جهت ویرایش 

کاربری 
نمایش اطلاعات به کاربر
برای شروع بایستی یک کلاس جهت ارتباط با DataBase داشته باشیم و کلیه کارهای مربوط به دیتابیس از طریق این کلاس مدیریت شود . 

این کلاس شامل متدهای پایه جهت کار با دیتابیس می باشد 
مانند 
1- برقراری ارتباط با دیتابیس 
2- انجام عملیات : Insert , Update , Delete 
3- انجام عملیات : Select  
به طور ساده تر  متدهایی که خروجی آنها به صورت یک DataSet یا datatable می باشد یا متدهایی Affected کویری شما را بر می گرداند 

تا بعد ... 

راستش من قصد نداشتم چیزی بنویسم ولی من هم مثه شما از اینکه هیچ کس در این مورد هیچ چیزی نمی گه ناراحتم من هم اطلاعاتم زیاد نیست اما خوشحال میشم که با کمک هم بتونیم این کارو تکمیل کنیم . ضمنا کلاس بالا رو هم آماده می کنم و می ذارم . تا اگه خدا خواست با هم ادامه بدیم

----------


## احمد سامعی

> سلام 
>  اما این کاری که شما انجام دادی از لایه Business خبری نیست


منون از توجه و پاسختون، من برنامه جديدم را تغيير دادم و مثل قبلي نيست و لايه بيزنس رو هم اضافه كردم 



> در مورد static گرفتن متد ها هم نمی تونم چیزی بگم.


در واقع من متدهاي static براي سادگي كار و استفاده بهتر از منابع بهره گرفتم چون اينجوري فكر كردم احتياجي به ايجاد نمونه از كلاس ندارم(البته مي دونم اصولي نيست.) و به خاطر معماری چند لایه از متد static استفاده نكردم.



> برای اینکه بشه یه سمپل گذاشت از دوستان خواهش می کنم با هم همکاری کنیم و یه سمپل تهیه کنیم . 
> .... تا اگه خدا خواست با هم ادامه بدیم


من هم موافقم و اگر كاري از دست بر مي آيد پيغام خصوصي بزنيد تو يك تاپيك جديد با عنوان آموزش طراحي برنامه هاي چند لايه كار شروع كنيم.
(ممكن من تجربه زيادي تو برنامه چند لايه نداشته باشم اما يكي كار با ديتابيس و طراحي اينترفيس و چيزهاي ديگه رو تا حدودي بلدم.)

----------


## ohh_mid

سلام 
برای ادامه من یک DatabaseHelper آماده کردم که می تونه کارهای مربوط به بانک اطلاعاتی رو انجام بده . (راستی من تجربه ویندوزی زیادی ندارم واسه همین بلد نیستم که تو برنامه های ویندوزی کانکشن رو کجا تعریف می کنند منظورم برای تغییرات بعدی کانکشن هست شاید بهتر باشه تو یه فایل متنی گذاشت و از تو همون فایل خوندش یا تو قسمت appsetting مربوط به ویندوز شاید بشه connection رو تعریف کرد خلاصه این چیزیه که به نظرم می رسه اگه راهنماییم کنید ممنون میشم تا بتونیم این قسمت مربوط به database  رو برای برنامه های دسکتاپ هم سفارشی کنیم . ) 

کدها خیلی ساده هستند ولی بازم اگه سوالی بود من در خدمتم . البته اگر کسی نظر بهتری داشته باشه یا از تکنولوژی های جدید مثل Linq بخواد استفاده کنه باعث خوشحالیه .

ضمنا  microsoft یه کتاب داره به اسم Application Architecture Guide 2.0  که دیدنش فکر می کنم خالی از لطف نباشه . 

می تونیم از همین جا بریم سراغ برنامه اصلی و یه نمونه ساده از معماری چند لایه رو پیاده سازی کنیم ولی می تونیم قبل از شروع یکمی ادویه اش رو بیشتر کنیم !!!
مثلا می تونیم واسه برنامه مون چیزهای زیر رو هم اضافه کنیم 
1- کلاسی مربوط به encrypt در فضای نام Security
2- کلاس مربوط به Globalization 
3- کلاس مربوط به استفاده از Resource
4- کلاسی مربوط به Logger

راستی برای ادامه کار بهتره که یه Solution  داشته باشیم و کارهایی که انجام می دیم تو یه Solution باشه این طوری به نظرم مرتب و تر و تمیز تر میشه . 

از نظراتتون محرومم نکنید . 

دانلود

----------


## mohsen_zelzela00

> سلام 
> برای ادامه من یک DatabaseHelper آماده کردم که می تونه کارهای مربوط به بانک اطلاعاتی رو انجام بده . (دانلود


 منطورتون از این جمله چی هست

----------


## linux

> وقتی بحث برنامه نویسی چند لایه پیش میاد همه مقاله سایت رشد رو میذارن یا لینک میدن ... 
> تو رو خدا دیگه بسه ... توی همین سایت برنامه نویس چندین بار این مقاله Copy و Paste شده .
> بخدا ما مفهومش رو فهمیدیم فقط میخوایم یه نمونه کوچیک با توضیح ببینیم .
> یه نفر بیاد به زبون ساده و همراه با یک نمونه ساده این موضوع رو توضیح بده ... جای دوری نمیره ! 
> همه هم دعاتون میکنن .
> 
> منتظریم


Design Pattern Framework. Release 2.0. C#‎ edition را از در گوگل جستجو کنید و دانلود کنید به همراه فایل های pdf یک مثال هم هست که برنامه نویسی چند لایه + سرویس بیس را کاملا با یک مثال توضیح داده است. بخاطر مسایل کپی رایت از گذاشتنش تو سایت معذورم

----------


## antisocial

من یک نمونه تا الان خواستم بذارم که خیلی ساده و کوچیکه اما توضیحات فارسی داره که همه متوجه میشن.اما حجمش 4مگابایته با دیتا بیس .متاسفانه نمیشه آپلود کرد.
باید چکارکرد؟تا آپلود کنم؟دوستان استفاده کنند.........

----------


## peymannaji

> من یک نمونه تا الان خواستم بذارم که خیلی ساده و کوچیکه اما توضیحات فارسی داره که همه متوجه میشن.اما حجمش 4مگابایته با دیتا بیس .متاسفانه نمیشه آپلود کرد.
> باید چکارکرد؟تا آپلود کنم؟دوستان استفاده کنند.........



برای من ایمیل کنید تا در هاست اختصاصی خودم آپلود کنم 

spanish_boys1[at]yahoo[.]com

----------


## man_a_m_m

با سلام

ميشه لطفا لينك دانلودي كه براي نمونه برنامه ي 3 لايه گذاشتيد رو چك كنيد . من نمي تونم دانلودش كنم . ارور ميده .
اگه مشكلي هست و توي سايت نمي تونيد بذاريد ،لطفا به ايميلم بفرستيد.
 هر جور كه راحتيد و امكانش وجود داره.
parandep@yahoo.com

ممنون
موفق باشيد

----------


## RED-C0DE

اینجا ی نمونه برنامه گذاشتم من ، بصورت 3 لایه و ساده یک دفترچه تلفن رو پیاده کردم :
https://barnamenevis.org/showpo...&postcount=302

----------


## esfahanitg

خوب مثل اينكه دوباره خودم بايد همه دعوا ها رو حل كنم :
همانطور كه دوستان اشاره كردند و تعريف لايه هارو گفتند .3 تا لايه تو هر برنامه مي تونه وجود داشته باشه.اگه 1 برنامه نويس حرفه اي باشين و از ويزارد ها براي ساخت برنامه استفاده نكنيد مي تونيد به روش زير برنامه 3 لايه بنويسيد:
اول فرم برنامه و كامپوننت هاي مورد نظرتون رو بنويسيد 
دوم كلاسي تهيه كنيد كه حاوي خواص مورد نظر براي پياده سازي شي شما جهت اتصال به پايگاه داده باشه.اين خواص وظيفه ايجاد ارتباط بين لايه مياني(bll) را بر عهده دارد .مثلا كلاس مشتري كه داراي خواص نام و فاميل و آدرس مشتري و... مي باشد.تو اين لايه شما ميتونين قوائد تجاري مربوط به اون سازمان كه واسش برنامه مي نويسين رو اعمال كنيد.مثلا چك كنيد كه اگه بدهي شخصي از 2000000 بيشتر هست نتونه خريد كنه و از اينجور موارد يا اينكه اگه فرد يك مشتري دائمي هست بهش تخفيف داده بشه و.....

سوم كلاسي تهيه كنيد كه وظيفش ايجاد ارتباط بين برنامه و پايگاه داده باشه يعني به زبان خودموني وظيفش اجراي رويه هاي ذخيره شده درون پايگاه داده باشه.

خوب حالا كه اين 3 تا مرحله رو انجام دادين 1 برنامه 3 لايه نوشتيد.
تذكري كه بايد بدم اينه كه واسه ايجاد ارتباط بين لايه ها مي تونيد از اين روش استفاده كنيد كه : 
اكه قراره يك دستور select از پايگاه داده انجام بشه بايد نوع برگشتي توابع درون كلاس هاي لايه Data access و Business از نوع Datatable يا Dataset و از اين موارد باشند تا لايه به لايه در صورتي كه عمليات از پايين ترين سطح درست انجام شد مقادير رو برگردونن و اگه قرار يك دستور مثل Insert,delete,... اجرا بشه بهتره نوع توابع از نوع bool باشه تا لايه به لايه در صورت درستي عمليات مقدار True برگردونه تا لايه بالايي از اجراي صحيح لايه پايين مطمئن بشه :
نكته:اغلب كلاس لايه DAL يك كلاس هست كه اين قابليت رو داره كه هر رويه اي كه بهش اعلام ميشه رو اجرا كنه اما كلاس لايه BLL بهتره كه واسه هر موجوديتي تو سيستم جداگانه طراحي بشه مثلا يك BLL واسه مشتري يكي واسه كالا يكي واسه فاكتور .....
يك مثال از تابعي در لايه DAL :
 public bool Insert(string procname, SqlParameter[] Params)
    {

        SqlConnection con = Publicclass.CreateCon();
        try
        {
            SqlCommand cmd = new SqlCommand(procname, con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(Params);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            return true;
        }
        catch (Exception)
        {
            con.Close();
            return false;
        }

    }
اينم يه مثال از لايه BLL :

public bool BLLInsert()
    {


        DAL dalobject = new DAL();
        SqlParameter[] param = new SqlParameter[5];
        param[0] = new SqlParameter("@sid", pid);
        param[1] = new SqlParameter("@title", title);

        param[2] = new SqlParameter("@f_text", f_text);
        param[3] = new SqlParameter("@s_date", date);
        param[4] = new SqlParameter("@adress", adress);

        return dalobject.Insert("add_contents", param);

    }
متغيير هاي pid,title,_text,... خواص كلاسي هستند كه اين تابع درون اون تعريف شده.
در فرم برنامه يا همون لايه PL اين خواص بايد مقدار دهي بشن و بعد تابع BLLInsert صدازده ميشه 

البه بحث برنامه نويسي لايه اي خيلي گسترده تر از اين حرفا هست و اين در واقع يك نمونه كوچيك اون هست.اصلا اين 3Layer programing hast كه با 3tire programing  فرق داره .
يك نكته ديگه هم بگم و تمام : اگه از روش كامپوننتي با پايگاه داده كار كنيد مي تونين از اشيايي مثل Dataset به عنوان لايه Dal استفاده كنيد.
بسه ديگه فكر كنم زياد حرف زدم : من دير به دير ميام تو اين سايت .شايد ديكه اين تاپيك رو ادامه ندم.اكه كسي سوالي داشت مي تونه بهم ايميل بزنه به آدرس EsfahanITG@yahoo.com

----------


## peymannaji

دوست عزیز ممنون از توضیحات  . کاشکی بصورت یه فایل پروژه این مثال ها رو پیاده میکردی ... اما با این حال ممنون از وقتی که گذاشتید ...

----------


## Vahid_moghaddam

در این لینک مقالات بسیار خوبی وجود داره
http://www.asp.net/learn/data-access/

----------


## jingiliboyz

اگر این رو pdf میزاشتید خیلی بهتر بود

----------


## hegmatane1386

من خودم می خواستم 3 لایه یاد بگیرم هی اینطوری برام داستان نگفتن، فایده نداره،یک درج و واکشی کردن من یاد گرفتم.

----------


## ayyub492

بنظر می آد برنامه نویسی چند لایه ای خط قرمز برنامه نویسانه. من حالا هرچه جستجو کردم یه برنامه چند لایه ای ندیده ام. من تا حالا برنامه نویسی چند لایه ای کار نکردم یعنی در مرحله آموزش هستم.بنظرم اگه کسی به برنامه نویسی یک زبان تسلط داشته باشه ، فکر کنم که برنامه نویسی چند لایه ای کار زیاد سخت و شاقی نباشه. چون برنامه نویسی چند لایه ای یک منطق برنامه نویسه و کد های مخصوص نداره
من اکیدآ به خودم و سایر دوستان مبتدی توصیه می کنم فعلا چند لایه ای رو بعد از آموزش و تسلط نسبی به زبان مورد علاقه خودتون دنبال کنن.
البته این نظر منه . اگه منتقد دارم خوشحال میشم نقدتون رو بیان کنن
در پایان اضافه کنم که چون چند لایه ای یه منطق برنامه نویسی یه در نتیجه میشه توامان با آموزش زبان همراه باشه اما تسلط به برنامه نویسی باعث میشه  ما از هدف چند لایه ای دور نشویم. سرعت ، کارایی و.....

----------


## AZERILA

یه سوالی که برای من پیش اومده اینکه با linq بازهم نیازی به لایه dal هست ؟

----------


## ashkan209

اینم یک پروژه ساده که با معماری سه لایه نوشته ام ، واسه دوستانی که درخواست سمپل داشتند
سایت مشکل داره ، نمیشه اینجا آپلود کرد
دانلود

----------


## ricky22

> یه سوالی که برای من پیش اومده اینکه با linq بازهم نیازی به لایه dal هست ؟


سلام
اره
http://aspguy.wordpress.com/2008/07/...h-linq-to-sql/

----------


## moslem.hady

سلام. من يه آموزش خوب پيدا كردم. يه پروژزه هم با asp نوشتم كه خيلي سادست. براتون ميذارم. يه دونه هم PowerPonit هست اونم ميذارم!!!
اين يه سايت خوب:
http://www.how2learnASP.NET/article....8-b75d804d6e2c


اينم تو همين سايت:
https://barnamenevis.org/showth...A7%D9%8A%D9%87
كه من بالايي رو توصيه ميكنم!!!

اين پروژه آموزشي:(صفحه كه باز شد creat download link رو بزنيد)
http://www.xlpar.com/h47oj4qeag8t/class.rar.html
به محضز اينكه بتونم آپلود كنم يه پي دي اف هم ميذارم كه مربوط به همين پروژه ميشه!! آخه حجمش بالاس و من سرعتم كم!!

----------


## tiia_kahkeshan

> اینم یک پروژه ساده که با معماری سه لایه نوشته ام ، واسه دوستانی که درخواست سمپل داشتند
> سایت مشکل داره ، نمیشه اینجا آپلود کرد
> دانلود


لینک را یک بررسی بکنید. و لطفا لینک جدید را بزارید.
ممنون

----------


## Javad.Kashi

سلام به همه 
دوستان من در این سایت ، فیلم های آموزشی در مورد برنامه نویسی چند لایه یافته ام می توانید از آنها استفاده کنید .موفق باشید

یا علی

----------


## hamidhws

سلام 
شاید بد نباشه این تاپیکو از زیر خاک بیرون بکشم !

تا اونجا که فهمیدم برنامه نویسی لایه ای یعنی اینکه مثلا لایه اینترفیس (رابط کاربری ) با بقیه لایه ها جدا باشه و برای مثال کسی که داره رو این لایه کار میکنه فقط چینش و دیزاین رو انجام میده و نمیتونه مثلا برای یه دکمه رویداد بنویسه

تا اینجا اگه درست باشه پس در واقع اگه با WPF کار کرده باشید متوجه میشید که لایه رابط کاربری کلا از بقیه قسمت ها جدا شده و با زبان XAML هست  (راحت میشه اونو تحت وب یا تحت ویندوز کرد) و کسی که وظیفه ساخت رابط کاربری رو داره اصلا احتیاجی به دانستن دانش زبان هایی از قبیل C#‎ ,.. نداره
و باالعکس برنامه نویسی که میخواد رویدادهارو تعریف کنه اصلا کاری به زبان XAML  نداره


در واقع این روش برای تسریع هر چه بیشتر و کار تیمی بدرد میخوره

----------


## hadidan

با سلام 
من تو asp تازه کارم ،
من فرق بین برنامه نویسی چند لایه و asp mvc رو درک نمی کنم
آیا هر دو یکی هستند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
،چون asp mvc هم برنامه رو به سه لایه تقسم می کند.

----------


## fakhravari

با سلام
دوستان من چنتا مثال میزنم و شما بگیر اشتباه میگم یا درسته.
1) لایه Data Access Layer = فقط برای اتصال ما به بانک است مثال تعریف
                   connect() و Disconnect() و DataTable select(string sql) و  docommand(string sql) و 
        public string ServerName;
        public string DBName = "libdb.mdf";
        public string username;
        public string password;
        SqlConnection con;
        SqlCommand cmd;
        SqlDataAdapter da;

        public DataAccess()
        {
            con = new SqlConnection();
            cmd = new SqlCommand();
            da = new SqlDataAdapter();
            cmd.Connection = con;
            da.SelectCommand = cmd;
        }

     
است . و 
2) Business Logic Layer این لایه کارش اینه که کلاسها رو درست کنیدم مانند
              Add() و GetOne() و Update() و...              
______________________
3) آیا  Presentation Layer  فقط همان صفحه می شود که کاربر برای وارد کردن اطلاعات از ان استفاده میکند که می شود واسط کاربر و برنامه
_____________________________-
دوستان اگه مواردی جا انداختم یا اشتباه گفتم راهنمایی کنید

----------

