View Full Version : مقاله : برنامه چندلایه چیست ؟
rtech
شنبه 17 شهریور 1386, 12:18 عصر
با توجه به اینکه دیدم خیلی از دوستان در این مورد سوال دارند دلم نیومد این مقاله ارزشمند رو اینجا نزارم :
در معماری چند لایه تمام برنامه به چندین بخش تقسیم میشود. این بخشها میتوانند فیزیکی یا منطقی باشند. هر بخش کار خاصی را انجام میدهد مثلا نمایش interface کاربر یا دسترسی به دادهها. برنامه میتواند به هر تعداد لایه داشته باشد ولی به هر حال بیشتر برنامهها سه لایهی مجزا دارند که عبارتاند از:
Presentation Layer
Business Logic Layer
Data Access Layer
http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/a11111111.jpg
همانطور که احتمالا حدس زدهاید، لایهی Presentation چیزی نیست به جز بخشی از نرمافزار که با کاربر برنامهی شما ارتباط برقرار میکند (interface برنامهی شماست). نمایش دادهها به کاربر نهایی و اجازه به آنان برای ارتباط داشتن با دادهها، اصلیترین وظیفهی این لایه است.
در بیشتر موارد، دادههایی که توسط کاربر وارد میشوند نیاز به اعتبارسنجی یا پردازش اضافی دارند. این مسؤولیت لایهی Business Logic است.
در نهایت دادههای برنامهی شما نیاز به ذخیره و بازیابی از طریق یک انبار داده دارند (مثلا سیستم مدیریت DataBaseهای رابطهای یا RDBMS و یا XML و ...) این وظیفه توسط لایهی دسترسی به داده انجام میشود.
بهطور خلاصه، فرایند مورد نظر ما اینگونه کار میکند:
- کاربر برای دادههای برنامه، درخواستی ارسال میکند.
- لایهی Data Access دادههای مورد نظر را بازیابی میکند و از طریق لایهی Business Logic آنها را به لایهی نمایش میفرستد. بعضی مواقع لایهی دسترسی به دادهها، این دادهها را مستقیما به لایهی نمایش ارسال میکند.
- لایهی نمایش اطلاعاتی که باید نمایش داده شوند را از طریق لایهی Business Logic دریافت میکند.
- کاربر دادهها را تغییر میدهد و عمل مناسب در مورد آنها را اجرا میکند (مثل اضافه یا بهروز کردن دادهها)
- لایهی Business Logic صحت دادههای وارد شده توسط کاربر را بررسی میکند (دادهها را اعتبارسنجی میکند)
- اگر دادهها معتبر باشند آنها را برای بهروز رسانی در بانک اطلاعاتی بهدست لایهی دسترسی به داده میسپارد.
مزیتهای برنامههای چند لایه
- برنامهها به چند بخش منطقی جدا از هم تقسیم میشوند و اتصال میان UI (رابط کاربری)، پردازشها و بانک اطلاعاتی کم میشود.
- تغییر در بانک اطلاعاتی یا روالهای دسترسی به دادهها، تاثیری در لایهی نمایش یا برنامهی کلاینت نخواهد گذاشت.
- برنامهی کلاینت با عبارات SQL آمیخته نخواهد شد.
- نام جداول و ستونها بهطور مؤثری از برنامهی Client حذف میشوند.
- برنامهی Client نمیفهمد که دادهها از کجا آمدهاند (چیزی که به آن Location Transparency گفته میشود)
- تغییر یا گسترش برنامه بسیار سادهتر خواهد شد، بدون نیاز به تغییر یا کامپایل مجدد برنامهی Client.
نکتهی منفی در معماری چند لایه این است که شما باید تعداد زیادی بخشها و کلاسهای ازهم جدا در نرمافزار بسازید. اما به هر حال مزایای این روش بیشتر و برتر از معایب آن است.
http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/aaaaaaa2.jpg
انتخابهای لایهی 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) استفاده کنید.
http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/3ter.jpg
ارسال داده از یک لایه به لایهی دیگر
در تمام موارد به ارسال اطلاعات از یک لایه به لایهی دیگر نیاز است؛ بهطور معمول برنامهنویسان از رشتهها، آرایهها، RecordSetهای غیرمتصل برای رسیدن به این هدف استفاده میکنند. در .Net ، DataSetها یک راه فوقالعاده برای انتقال اطلاعات میان لایهها فراهم میکنند. شما حتی میتوانید با برنامهنویسی یک DataSet بسازید و آن را با دادههای خودتان پر کنید. اگر اشیا را خیلی دوست دارید میتوانید از Typed DataSets استفاده کنید که در واقع کلاسی مشتق شده از کلاس DataSet است که جداول و سطرها را به شکل یک شی معرفی میکند.
http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/a3a3a3.jpg
منبع :رشد (http://www.roshd.ir)
cactuskhan
شنبه 17 شهریور 1386, 12:53 عصر
مقاله و پروژه در باره برنامه نویسی چندلایه خیلی زیاده پیدا میشه ! هم فارسی هم لاتین ! (نمونش هم تو سایت هست )
ولی مشکلی اینجاست که من تا به حال هر دوی این ها رو یعنی هم پروژه و هم توضیح کامل اون رو یکجا ندیدم !
دوستان اگه سراغ دارن معرفی کنن ! لاتین هم باشه موردی نداره !
rtech
شنبه 17 شهریور 1386, 13:10 عصر
یک پروژه چندلایه رو که یکی از دوستان در بخش asp.net معرفی کردند که میتونید از اون استفاده کنید
peymannaji
پنج شنبه 22 شهریور 1386, 19:04 عصر
سلام . ممنون از مقالتون ...
من میخوام بدونم که کاری که میکنم بفرض در یک برنامه ای که یک فیلد داره که طرف اسمشو وارد میکنه و یک دکمه داره که ذخیره در دیتا بیس انجام میشه ، برنامه نویسی لایه ای هست یا خیر :
اول - اینتر فیس برنامه که در همون قسمت طراحی دات نت ساخته میشه
دوم - دستورات و کامپونت هایی که با درگ کردن از قسمت کامپونت ها میندازم رو صفحه( یک تکست باکس + یک دکمه + ولیدیتور ) و برای هر کدوم کد مینویسم و مقادیری که کاربرا وارد میکنن رو کنترل میکنم و پاسشون میدم به دیتا بیس .
سوم - ذخیره در دیتا بیس رو بصورت استورپرسیجر نوشتم .
پس روند کار به اینصورته که از رابط کاربری ( اینترفیس ) فرد نامشو میزنه ( Presentation Layer)
و بعدش کدهایی که نوشتم مقدار تکست باکس رو چک میکنه و اون رو میفرسته به سمت بانک ( Business Logic Layer) و مقداری که به استور پروسیجر پاس شده با دستور اینسرت که در پرسیجر نوشتم وارد بانک میشه ( Data Access Layer)
آیا اینی که گفتم میشه برنامه نویسی 3 لایه ؟ چیزی که از نوشته هاتون فهمیدم این بو د ...
خوب در اینجا هم من 3 بخشی که گفتید رو دارم .... منتظر جوابتون هستم
با تشکر ....
babak_delphi
پنج شنبه 16 اسفند 1386, 03:16 صبح
در برنامه نویسی چند لایه بخشهای مربوط به دسترسی به پایگاه داده ها کاملا مستقل است و کلاینت ها به صورت منطقی به اون وصل می شوند
برنامه های کلاینت اطلاعی از نحوه دسترسی به پایگاه داده و نحوه بازیابی اطلاعات ندارند
ولی برنامه ای که شما نوشتید یک برنامه معمولیه نه چند لایه
چون همه اون قسمتها توی یک سیستم هستند و اگر بخواهید که چند نسخه از این برنامه رو داشته باشید باید همهِ اون قسمتها رو روی تک تک سیستمها تکرار کنی یا نهایتا در حالت Client/Servet میتونی دیتابیس رو روی سرور قرار بدی ولی باز باید لایه میانی رو روی تک تک کلاینت ها تکرار کنی ولی در روش چند لایه ، لایه میانی هم مثل Data Access Layer روی یک سیستم مجزا قرار داره و هر چند تا کلاینت هم که باشه شما فقط یک لایه میانی برای همهء اونها دارید که البته میتونه یک گره فیزیکی باشه (یعنی روی یک سیستم مجزا) یا یک گره منطقی (یعنی روی همون سیستمی که Data Access Layer روی اون قرار داره) که در حالت اول سه گره فیزیکی و سه گره منطقی دارید و در حالت دوم دو گره فیزیکی و سه گره منطقی
امیدوارم مفید واقع شده باشه.
arashkey
چهارشنبه 22 اسفند 1386, 23:45 عصر
می شه لطفا بیشتر توضیح بدید
من در مورد این معماری سه سطحی خیلی تو سایت خوندم ، ولی توضیح زیادی در موردش ندیدم، توضیحات دوستمون هم زیاد جالب نبود . بیشتر گیجم کرد
می شه یکم بیشتر توضیح بدید و یا لینک بدید
teshnehab
شنبه 25 آبان 1387, 01:53 صبح
مقاله و پروژه در باره برنامه نویسی چندلایه خیلی زیاده پیدا میشه ! هم فارسی هم لاتین ! (نمونش هم تو سایت هست )
ولی مشکلی اینجاست که من تا به حال هر دوی این ها رو یعنی هم پروژه و هم توضیح کامل اون رو یکجا ندیدم !
دوستان اگه سراغ دارن معرفی کنن ! لاتین هم باشه موردی نداره !
سلام
من هم همين مشكل رو دارم. پروژه برنامه نويسي 3 لايه با آموزش مرحله به مرحله باشه.
البته نمونه كد كوچك براي راهنمايي و راه افتادن.
لطفا با آدرس، لينك يا سايت معرفي كنيد.
با تشكر
شاپرک
چهارشنبه 29 آبان 1387, 10:41 صبح
وقتی بحث برنامه نویسی چند لایه پیش میاد همه مقاله سایت رشد رو میذارن یا لینک میدن ...
تو رو خدا دیگه بسه ... توی همین سایت برنامه نویس چندین بار این مقاله Copy و Paste شده .
بخدا ما مفهومش رو فهمیدیم فقط میخوایم یه نمونه کوچیک با توضیح ببینیم .
یه نفر بیاد به زبون ساده و همراه با یک نمونه ساده این موضوع رو توضیح بده ... جای دوری نمیره !
همه هم دعاتون میکنن .
منتظریم
peymannaji
چهارشنبه 27 آذر 1387, 13:22 عصر
من با شاپرک موافقم . متاسفانه با هر کسی که صحبت میکنم هر کس یک درکی از این موضوع داره و واقعیت امر اینکه اکثریت نمیدونیم این موضوعی که همیشه در حد یک تئوری بیان میشه در عمل به چه صوورت پیاده سازی میشه ...
احمد سامعی
پنج شنبه 08 اسفند 1387, 10:20 صبح
مي شه دوستان يك برنامه ساده با #C بزارن...
من برنامه هام را اينجوري مي نويسم ببينيد اين برنامه چند لايه مي شه يا نه ؟ و اشكالش كجاست ؟
اول يك پرژه Windows Forms Application مي سازم تا با كاربر ارتباط برقرار كنه
بعد يك پرژه Class Library اضافه مي كنم كه يك dll. مي شه و از داخل اون به بانكم دسترسي دارم و اينزرت و آپديت... انجام مي دم ( و ممكن اين dll. ها چندتا باشه هر كدوم واسه يك كار با ديتا بيس)
و از داخل برنامه اصلي داده ها به اين dll. ها پاس مي دم يا ازشون اطلاعات رو دريافت مي كنم و براي راهتي كار توابع داخل dll. ها رو هم static مي نويسم
ohh_mid
چهارشنبه 26 فروردین 1388, 01:24 صبح
مي شه دوستان يك برنامه ساده با #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 کویری شما را بر می گرداند
تا بعد ...
راستش من قصد نداشتم چیزی بنویسم ولی من هم مثه شما از اینکه هیچ کس در این مورد هیچ چیزی نمی گه ناراحتم من هم اطلاعاتم زیاد نیست اما خوشحال میشم که با کمک هم بتونیم این کارو تکمیل کنیم . ضمنا کلاس بالا رو هم آماده می کنم و می ذارم . تا اگه خدا خواست با هم ادامه بدیم
احمد سامعی
چهارشنبه 26 فروردین 1388, 13:00 عصر
سلام
اما این کاری که شما انجام دادی از لایه Business خبری نیست
منون از توجه و پاسختون، من برنامه جديدم را تغيير دادم و مثل قبلي نيست و لايه بيزنس رو هم اضافه كردم
در مورد static گرفتن متد ها هم نمی تونم چیزی بگم.
در واقع من متدهاي static براي سادگي كار و استفاده بهتر از منابع بهره گرفتم چون اينجوري فكر كردم احتياجي به ايجاد نمونه از كلاس ندارم(البته مي دونم اصولي نيست.) و به خاطر معماری چند لایه از متد static استفاده نكردم.
برای اینکه بشه یه سمپل گذاشت از دوستان خواهش می کنم با هم همکاری کنیم و یه سمپل تهیه کنیم .
.... تا اگه خدا خواست با هم ادامه بدیم
من هم موافقم و اگر كاري از دست بر مي آيد پيغام خصوصي بزنيد تو يك تاپيك جديد با عنوان آموزش طراحي برنامه هاي چند لايه كار شروع كنيم.
(ممكن من تجربه زيادي تو برنامه چند لايه نداشته باشم اما يكي كار با ديتابيس و طراحي اينترفيس و چيزهاي ديگه رو تا حدودي بلدم.)
ohh_mid
پنج شنبه 27 فروردین 1388, 13:54 عصر
سلام
برای ادامه من یک DatabaseHelper آماده کردم که می تونه کارهای مربوط به بانک اطلاعاتی رو انجام بده . (راستی من تجربه ویندوزی زیادی ندارم واسه همین بلد نیستم که تو برنامه های ویندوزی کانکشن رو کجا تعریف می کنند منظورم برای تغییرات بعدی کانکشن هست شاید بهتر باشه تو یه فایل متنی گذاشت و از تو همون فایل خوندش یا تو قسمت appsetting مربوط به ویندوز شاید بشه connection رو تعریف کرد خلاصه این چیزیه که به نظرم می رسه اگه راهنماییم کنید ممنون میشم تا بتونیم این قسمت مربوط به database رو برای برنامه های دسکتاپ هم سفارشی کنیم . )
کدها خیلی ساده هستند ولی بازم اگه سوالی بود من در خدمتم . البته اگر کسی نظر بهتری داشته باشه یا از تکنولوژی های جدید مثل Linq بخواد استفاده کنه باعث خوشحالیه .
ضمنا microsoft یه کتاب داره به اسم Application Architecture Guide 2.0 که دیدنش فکر می کنم خالی از لطف نباشه .
می تونیم از همین جا بریم سراغ برنامه اصلی و یه نمونه ساده از معماری چند لایه رو پیاده سازی کنیم ولی می تونیم قبل از شروع یکمی ادویه اش رو بیشتر کنیم !!!
مثلا می تونیم واسه برنامه مون چیزهای زیر رو هم اضافه کنیم
1- کلاسی مربوط به encrypt در فضای نام Security
2- کلاس مربوط به Globalization
3- کلاس مربوط به استفاده از Resource
4- کلاسی مربوط به Logger
راستی برای ادامه کار بهتره که یه Solution داشته باشیم و کارهایی که انجام می دیم تو یه Solution باشه این طوری به نظرم مرتب و تر و تمیز تر میشه .
از نظراتتون محرومم نکنید .
دانلود (http://radekal.ir/upload/DatabaseHelper.rar)
mohsen_zelzela00
چهارشنبه 30 اردیبهشت 1388, 02:19 صبح
سلام
برای ادامه من یک DatabaseHelper آماده کردم که می تونه کارهای مربوط به بانک اطلاعاتی رو انجام بده . (دانلود (http://radekal.ir/upload/DatabaseHelper.rar)
منطورتون از این جمله چی هست
linux
دوشنبه 04 خرداد 1388, 11:01 صبح
وقتی بحث برنامه نویسی چند لایه پیش میاد همه مقاله سایت رشد رو میذارن یا لینک میدن ...
تو رو خدا دیگه بسه ... توی همین سایت برنامه نویس چندین بار این مقاله Copy و Paste شده .
بخدا ما مفهومش رو فهمیدیم فقط میخوایم یه نمونه کوچیک با توضیح ببینیم .
یه نفر بیاد به زبون ساده و همراه با یک نمونه ساده این موضوع رو توضیح بده ... جای دوری نمیره !
همه هم دعاتون میکنن .
منتظریم
Design Pattern Framework. Release 2.0. C# edition را از در گوگل جستجو کنید و دانلود کنید به همراه فایل های pdf یک مثال هم هست که برنامه نویسی چند لایه + سرویس بیس را کاملا با یک مثال توضیح داده است. بخاطر مسایل کپی رایت از گذاشتنش تو سایت معذورم
antisocial
پنج شنبه 21 خرداد 1388, 03:26 صبح
من یک نمونه تا الان خواستم بذارم که خیلی ساده و کوچیکه اما توضیحات فارسی داره که همه متوجه میشن.اما حجمش 4مگابایته با دیتا بیس .متاسفانه نمیشه آپلود کرد.
باید چکارکرد؟تا آپلود کنم؟دوستان استفاده کنند.........
peymannaji
پنج شنبه 21 خرداد 1388, 03:37 صبح
من یک نمونه تا الان خواستم بذارم که خیلی ساده و کوچیکه اما توضیحات فارسی داره که همه متوجه میشن.اما حجمش 4مگابایته با دیتا بیس .متاسفانه نمیشه آپلود کرد.
باید چکارکرد؟تا آپلود کنم؟دوستان استفاده کنند.........
برای من ایمیل کنید تا در هاست اختصاصی خودم آپلود کنم
spanish_boys1[at]yahoo[.]com
man_a_m_m
دوشنبه 15 تیر 1388, 12:53 عصر
با سلام
ميشه لطفا لينك دانلودي كه براي نمونه برنامه ي 3 لايه گذاشتيد رو چك كنيد . من نمي تونم دانلودش كنم . ارور ميده .
اگه مشكلي هست و توي سايت نمي تونيد بذاريد ،لطفا به ايميلم بفرستيد.
هر جور كه راحتيد و امكانش وجود داره.
parandep@yahoo.com
ممنون
موفق باشيد
RED-C0DE
پنج شنبه 01 مرداد 1388, 19:15 عصر
اینجا ی نمونه برنامه گذاشتم من ، بصورت 3 لایه و ساده یک دفترچه تلفن رو پیاده کردم :
http://barnamenevis.org/forum/showpost.php?p=763380&postcount=302
esfahanitg
یک شنبه 15 شهریور 1388, 01:39 صبح
خوب مثل اينكه دوباره خودم بايد همه دعوا ها رو حل كنم :
همانطور كه دوستان اشاره كردند و تعريف لايه هارو گفتند .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
یک شنبه 15 شهریور 1388, 02:20 صبح
دوست عزیز ممنون از توضیحات . کاشکی بصورت یه فایل پروژه این مثال ها رو پیاده میکردی ... اما با این حال ممنون از وقتی که گذاشتید ...
Vahid_moghaddam
یک شنبه 29 شهریور 1388, 20:21 عصر
در این لینک مقالات بسیار خوبی وجود داره
http://www.asp.net/learn/data-access/
jingiliboyz
یک شنبه 18 بهمن 1388, 14:59 عصر
اگر این رو pdf میزاشتید خیلی بهتر بود
hegmatane1386
شنبه 08 خرداد 1389, 18:38 عصر
من خودم می خواستم 3 لایه یاد بگیرم هی اینطوری برام داستان نگفتن، فایده نداره،یک درج و واکشی کردن من یاد گرفتم.
ayyub492
چهارشنبه 16 تیر 1389, 10:28 صبح
بنظر می آد برنامه نویسی چند لایه ای خط قرمز برنامه نویسانه. من حالا هرچه جستجو کردم یه برنامه چند لایه ای ندیده ام. من تا حالا برنامه نویسی چند لایه ای کار نکردم یعنی در مرحله آموزش هستم.بنظرم اگه کسی به برنامه نویسی یک زبان تسلط داشته باشه ، فکر کنم که برنامه نویسی چند لایه ای کار زیاد سخت و شاقی نباشه. چون برنامه نویسی چند لایه ای یک منطق برنامه نویسه و کد های مخصوص نداره
من اکیدآ به خودم و سایر دوستان مبتدی توصیه می کنم فعلا چند لایه ای رو بعد از آموزش و تسلط نسبی به زبان مورد علاقه خودتون دنبال کنن.
البته این نظر منه . اگه منتقد دارم خوشحال میشم نقدتون رو بیان کنن
در پایان اضافه کنم که چون چند لایه ای یه منطق برنامه نویسی یه در نتیجه میشه توامان با آموزش زبان همراه باشه اما تسلط به برنامه نویسی باعث میشه ما از هدف چند لایه ای دور نشویم. سرعت ، کارایی و.....
AZERILA
چهارشنبه 23 تیر 1389, 13:35 عصر
یه سوالی که برای من پیش اومده اینکه با linq بازهم نیازی به لایه dal هست ؟
ashkan209
جمعه 01 مرداد 1389, 23:00 عصر
اینم یک پروژه ساده که با معماری سه لایه نوشته ام ، واسه دوستانی که درخواست سمپل داشتند
سایت مشکل داره ، نمیشه اینجا آپلود کرد
دانلود (http://www.4shared.com/file/QBMEFy9c/Telephone_3Tier.html)
ricky22
شنبه 02 مرداد 1389, 18:54 عصر
یه سوالی که برای من پیش اومده اینکه با linq بازهم نیازی به لایه dal هست ؟
سلام
اره
http://aspguy.wordpress.com/2008/07/28/a-3-tier-architecture-with-linq-to-sql/
moslem.hady
دوشنبه 08 شهریور 1389, 12:50 عصر
سلام. من يه آموزش خوب پيدا كردم. يه پروژزه هم با asp نوشتم كه خيلي سادست. براتون ميذارم. يه دونه هم PowerPonit هست اونم ميذارم!!!
اين يه سايت خوب:
http://www.how2learnASP.NET/article.aspx?code=88407883-053c-4035-88c8-b75d804d6e2c
اينم تو همين سايت:
http://barnamenevis.org/forum/showthread.php?t=201326&highlight=%D9%84%D8%A7%D9%8A%D9%87
كه من بالايي رو توصيه ميكنم!!!
اين پروژه آموزشي:(صفحه كه باز شد creat download link رو بزنيد)
http://www.xlpar.com/h47oj4qeag8t/class.rar.html
به محضز اينكه بتونم آپلود كنم يه پي دي اف هم ميذارم كه مربوط به همين پروژه ميشه!! آخه حجمش بالاس و من سرعتم كم!!
tiia_kahkeshan
شنبه 13 شهریور 1389, 18:43 عصر
اینم یک پروژه ساده که با معماری سه لایه نوشته ام ، واسه دوستانی که درخواست سمپل داشتند
سایت مشکل داره ، نمیشه اینجا آپلود کرد
دانلود (http://www.4shared.com/file/QBMEFy9c/Telephone_3Tier.html)
لینک را یک بررسی بکنید. و لطفا لینک جدید را بزارید.
ممنون
Javad.Kashi
چهارشنبه 27 بهمن 1389, 12:15 عصر
سلام به همه
دوستان من در این سایت (http://www.babrian.com) ، فیلم های آموزشی (http://www.babrian.com/tabid/115/Default.aspx) در مورد برنامه نویسی چند لایه یافته ام می توانید از آنها استفاده کنید .موفق باشید
یا علی
hamidhws
دوشنبه 08 فروردین 1390, 09:51 صبح
سلام
شاید بد نباشه این تاپیکو از زیر خاک بیرون بکشم !
تا اونجا که فهمیدم برنامه نویسی لایه ای یعنی اینکه مثلا لایه اینترفیس (رابط کاربری ) با بقیه لایه ها جدا باشه و برای مثال کسی که داره رو این لایه کار میکنه فقط چینش و دیزاین رو انجام میده و نمیتونه مثلا برای یه دکمه رویداد بنویسه
تا اینجا اگه درست باشه پس در واقع اگه با WPF کار کرده باشید متوجه میشید که لایه رابط کاربری کلا از بقیه قسمت ها جدا شده و با زبان XAML هست (راحت میشه اونو تحت وب یا تحت ویندوز کرد) و کسی که وظیفه ساخت رابط کاربری رو داره اصلا احتیاجی به دانستن دانش زبان هایی از قبیل C# ,.. نداره
و باالعکس برنامه نویسی که میخواد رویدادهارو تعریف کنه اصلا کاری به زبان XAML نداره
در واقع این روش برای تسریع هر چه بیشتر و کار تیمی بدرد میخوره
hadidan
سه شنبه 29 شهریور 1390, 19:12 عصر
با سلام
من تو asp تازه کارم ،
من فرق بین برنامه نویسی چند لایه و asp mvc رو درک نمی کنم
آیا هر دو یکی هستند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
،چون asp mvc هم برنامه رو به سه لایه تقسم می کند.
fakhravari
سه شنبه 24 آبان 1390, 12:53 عصر
با سلام
دوستان من چنتا مثال میزنم و شما بگیر اشتباه میگم یا درسته.
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 فقط همان صفحه می شود که کاربر برای وارد کردن اطلاعات از ان استفاده میکند که می شود واسط کاربر و برنامه
_____________________________-
دوستان اگه مواردی جا انداختم یا اشتباه گفتم راهنمایی کنید
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.