# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  پیاده سازی معماری 3 لایه در سی شارپ

## am12622

با سلام به دوستان عزیز
شنیدم که میگن میشه در دات نت بصورت چند لایه ( چند سطحی ) برنامه نوشت . میخوام بدونم برنامه نویسی چند لایه یعنی چی ؟! . اگر یک مثال ساده و یک مثال نیمه سخت بزنید ممنون میشم.اگه کد هم داشته باشه که خیلی عالی میشه.

----------


## omid_Ahmadi

به برنامه هایی که به چند قسمت کلی تقسیم میشن و هر قسمت در یک لایه مجزا اجرا میشه ولی مجموعه همه این قسمتها با هم برنامه رو تشکیل میدن برنامه های چند لایه میگن. معمولا برنامه ها 3 لایه یا 5 لایه هستند. برنامه های 3 لایه شامل Presentation Layer و Business Logic Layer و Database Layer میشوند و در برنامه های 5 لایه هم لایه منطق تجاری برنامه رو به 3 لایه دیگر تقسیم میکنند.

----------


## Delphi Skyline

بله . متشکرم از شما . اما آیا در جاوا که .NET نداره میشه چند سطحی نوشت ؟

----------


## omid_Ahmadi

کسانی که از جاوا استفاده میکنند برای این کار از J2EE استفاده میکنند.

----------


## am12622

ممنون از اینکه جواب دادید(همه دوستان). اما این چیزی که شما گفتید تغریبا فقط ترجمه چند سطحی بود.شایدم من یه کم .... دیر میفهمم . میشه لطفا بیشتر راهنمایی کنید.

----------


## omid_Ahmadi

خوب یک مدل ساده برنامه که شامل 3 لایه باشه معمولا به این صورت طراحی میشه. فرض کنید یک شرکت یک شیکه LAN داخلی که کامپیوترهای اون رو به هم متصل میکنه داره. برای نوشتن یک برنامه 3 لایه که بتونه کارهای مختلف اون شرکت رو مدیریت کنه به صورت زیر عمل میکنند. لایه اول همونطور که گفتم Presentation Layer یا لایه ارایه دهنده است که معمولا رابط کاربری که در کامپیوتر کلاینتها نمایش داده میشه مد نظره. لایه دوم Business Logic Layer یا لایه ای است که منطق تجاری برنامه و طریقه عملکرد اون در این لایه قرار میگیره. لایه سوم هم Database Layer یا لایه بانک اطلاعاتی است که معمولا شامل یک یا چند سرور بانک اطلاعاتی میشه که اطلاعات مربوط به برنامه رو نگهداری میکنند. لایه دوم در حقیقت اطلاعات خواسته شده توسط کاربران لایه اول رو از لایه بانک اطلاعاتی دریافت میکنه و بعد از تجزیه و تحلیل اونها رو به کاربر نمایش میده

----------


## titbasoft

توسعه یک نرم افزار چند لایه ارتباطی به زبان و یا حتی platform کد نویسی نداره. در مورد این مساله در زمان طراحی نرم افزار بحث میشه. امکان داره که هر لایه در یک بستر کاملا جدا توسعه داده بشه. حتی در یک لایه ممکنه از 2 بستر یا زبان مختلف استفاده بشه. این یک تکنولژی جدید نیست که در دات نت استفاده شده باشه یا مثلا در VS 6 نشه چند لایه نوشت. از تکنولژی های خیلی قدیمی که بوجود آوردن یک ساختار چند لایه رو تسهیل می کردن میشه به MTS در NT4 اشاره کرد . 
این مساله کاملا یک مفهوم است.

----------


## omid_Ahmadi

> توسعه یک نرم افزار چند لایه ارتباطی به زبان و یا حتی platform کد نویسی نداره. در مورد این مساله در زمان طراحی نرم افزار بحث میشه. امکان داره که هر لایه در یک بستر کاملا جدا توسعه داده بشه. حتی در یک لایه ممکنه از 2 بستر یا زبان مختلف استفاده بشه. این یک تکنولژی جدید نیست که در دات نت استفاده شده باشه یا مثلا در VS 6 نشه چند لایه نوشت. از تکنولژی های خیلی قدیمی که بوجود آوردن یک ساختار چند لایه رو تسهیل می کردن میشه به MTS در NT4 اشاره کرد . 
> این مساله کاملا یک مفهوم است.


حرف شما کاملا درسته من هم در هیچ قسمتی خلاف این موضوعات رو ذکر نکردم.

----------


## am12622

باز هم تشکر از دوستان . ولی میشه لطفا یک مثال پیاده سازی شده به من معرفی کنید. که من بتونم ببینم چیه !!. در واقع دنبال یک نمونه برنامه, پیاده سازی شده هستم که کد نویسی شده باشه. ( البته در دات نت ). من بتونم Download کنم و اجرا کنم و Source برنامه را هم بتونم ببینم . دو تا مثال میخوام یکی سخت و یکی آسون .

----------


## titbasoft

http://www.barnamenevis.org/sh...ad.php?t=18475
http://www.barnamenevis.org/sh...ad.php?t=20837

----------


## dalaho

سلام من می خواستم درمورد لایه بندی اطلاعاتی داشته باشم لطفآ  اگر کسی مطلبی یا لینکی دارد واسم بفرسته

----------


## Mahdavi

ساده ترین شکل اون داشتن سه لایه UI و BR  و DA هست.
1- در این لایه شما فقط مسایل مربوط به نمایش اطلاعات رو انجام میدید. به عبارت دیگه چیزی که کاربر قراره ببینه.
2-لایه تصمیم گیری و قواعد کاری. مثلا آیا این کاربر مجاز به دیدند این اطلاعات هست یا نه ؟ و فرمولهای محاسبه.
3-این لایه هم که از اسمش پیداست . لایه مربوط به انجام کارهای دیتابیس. عملیات مربوطه.


البته این شکل ساده مسال هستش و در دنیای واقعی این لایه ها افزایش پیدا میکنند.

----------


## مطهر

"لایه" با "چند سطحی" یکیه؟
در این مورد منبع تکمیلی؟
ممنون

----------


## Babak-Aghili

این هم منبع :

http://rapidshare.de/files/4520398/1...Tiers.pdf.html

----------


## C#‎_web

در مورد لایه بندی و برنامه نویسی لایه ای فقط یکسری اطلاعات تئوری دارم آیا کسی به طور عملی اینکاررا در پیش گرفته ؟؟
آیا نمونه کد و یا نمونه برنامه ای هست ؟  و یا اگر ممکنه  دوستان راهنمایی کنند که برای برنامه نویسی به این طریق چه روندها و مراحلی باید طی شود  ؟؟
البته لینک در قسمت قبل باز نمیشد. اگر منبعی برای دریافت اطلاعات بیشتری هست ، لطفاً مرا راهنمایی کنید.

----------


## یاسر مددیان

این لینک که باز نمیشه! فایل وجود نداره.       اگه لطف کنید و آپلود کنید ممنون میشم.




با تشکر.

----------


## reza_rad

می تونید از مثال Duwamish  که ماله خود مایکروسافت هست استفاده کنید. البته مربوط به 2003  هست. 
خیلی عالی نیست ولی برای شروع کار چندلایه خوبه.
اگه دات نت 2003 نصب کردید توی همچین آدرسی هست :
D:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples

اگه هم نداریدش از اینجا دانلود کنید:
http://www.microsoft.com/downloads/d...displaylang=en

----------


## mahan8088

دوستان من می خوام برنامه نویسی #C و بانک های اطلاعاتی شروع کنم که چند تا سوال برام پیش اومده
1- اولاً دقیقاً نمی دونم از اکسس استفاده کنم یا از sql server ، فکر می کنم اکسس راحت تره ولی نوشته های دوستان رو که می خوندم انگار محدویت هائی رو داره که sql server نداره می خوام بدونم آیا اکسس 2007 هم همین محدودیت ها رو داره ؟
2- ضمناً من نمیدونم برای استفاده از SQL SERVER حتما باید نرم افزارش رو به ویندوزم نصب کنم یا اگه فقط ویژوال استودیو دات نت 2005 رو نصب کنم کافیه ، آخه انگار اونم Sql server داره و اینکه بعد از نصب روش استفاده اونم مثل اکسسه ؟ 
3- و بعد اینکه من چطوری می تونم یه منبع خوب درباره sql و یا روش استفاده از بانک های اطلاعاتی در سی شارپ بدست بیارم ، آیا می تونم از MSDN ویژوال استودیو 2005 استفاده کنم یا نه ؟
لطفاً رهنمائیم  کنید . ( لطفا جوابهاتونو با دلیل بفرمائید ، برام مهمه )
مرســــــــــــــــــــــ  ــــی

----------


## omid_Ahmadi

1) استفاده از اکسس یا SQL Server بیشتر به محیطی که قراره برنامه نهایی در اون مورد استفاده قرار بگیره، تعداد کاربرانی که می خوان در هر لحظه از داده های درون بانک استفاده کنن، مقدار و حجم اطلاعاتی که در بانک ذخیره می شه، حجم انتقال اطلاعات بانک با لایه های دیگه برنامه و ... بستگی داره. اگر فقط به عنوان یادگیری می خواهید بدونید، بهتره به هر دوی این محیط ها آشنا بشید. به این صورت خودتون متوجه می شید که کجا بهتره از چه DBMS ای استفاده کنید. در این سایت مقایسه های زیادی در مورد تفاوت موجود در بانکهای اطلاعاتی وجود داره، می تونید از اونها هم استفاده کنید تا تفاوت نسخه های بانکهای اطلاعاتی رو بهتر درک کنید.

2) استفاده از SQL Server مقداری با Access تفاوت داره. نسخه ای از SQL Server که همراه با VS نصب می شه برای کارهای آموزشی و ابتدایی می تونه نیازتون رو برطرف کنه، اما برای برنامه های واقعی، لازم دارید که از یکی از نسخه های SQL Server (به جز Express) استفاده کنید.

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

موفق باشید.

----------


## مهدی رحیم زاده

اگر در مورد کار با بانک access نمونه برنامه خواستید بگید براتون میزارم ...
البته فکر کنم توی « *نمونه برنامه های #C* » بتونی پیدا کنی ....

----------


## Keramatifar

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

----------


## shiva_naderi

سلام به همگی دوستان 
می شه یه Sample برای برنامه نویسی 2 لایه یا 3 لایه تحت Win Application  به من یاد بدین یا بگین برم از کجا Download  کنم  . مثلاً database  من Sql  هست می خوام از یه جدول Select  کنم و داخل Data gridView نشون بدم . نمی نمدونم چه جوری لایه ای بنویسم . 

ممنون می شم اگه راهنماییم کنید .

----------


## MH2538

دوست عزیز 
سلام
شما باید اول مشخص کنی بر اساس نیاز های سیستمت از کدام یکی از روش ها می خوای برنامه چند لایه بنویسی.
مثلاً WebService یا WinService یا ...
بهتره اول یک سری اطلاعات پایه رو مطالعه کنی.
بعد بر اساس نیازها و امکانات سیستم روشت رو انتخاب کنی .
بعد روی اون روش بصورت جدی کار کنی.

----------


## shiva_naderi

می خواستم Winservice  باشه اما لایه ای بلد نیستم .

----------


## MH2538

سلام
شما اول نوشتن WinService رو خوب مطالعه کن.
بعد روی multi tier مطالعه کن.
در نهایت این دو تا رو با هم تلفیق کن.

----------


## leilav_1984

یه نمونه خیلی خوب پروژه Dwamish هست که می تونی از سایت Microsoft بگیریش

----------


## اَرژنگ

> یه نمونه خیلی خوب پروژه Dwamish هست که می تونی از سایت Microsoft بگیریش


http://msdn2.microsoft.com/en-us/library/ms978471.aspx

----------


## اَرژنگ

*MSDN Webcast: Visual Basic .NET Soup to Nuts: Building a Multi-Tier Business Application (Level 200)*

----------


## Ali2200

اگه بخام از معماری سه لایه استفاده کنم باید از کلاس استفاده کنم سوال من این است باید همه چیزهایی که می خاهم در پایگاه داده ذخیره کنم به عنوان پارامتر بفرستم یا راه دیگه ای هم داره؟
متشکرم

----------


## mehdi.mousavi

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


سلام.
شما مگه می تونید تو C#‎ کدی بنویسید که در درون یک کلاس قرار نگیره؟ (جدا از معماری کار). پس این حرف به چه معنی هستش که "اگه بخوام از معماری سه لایه استفاده کنم، باید از کلاس استفاده کنم". شما چه از معماری سه لایه استفاده کنید، چه نکنید، باید از کلاسها استفاده کنید. 

اما در مورد پاسخ سوالتون، که به Data Access Logic Component یا همون DALC بر میگرده. شما این انتخاب رو دارید که از Dynamic SQL ها استفاده کنید. بعنوان مثال دستورات CRUD رو بصورت String در کدتون تعریف کنید و سپس اونها رو اجرا کنید. اما این راه، خطرات SQL Injection رو در پی داره. روش دیگه، استفاده از Stored Procedure هاست. به این ترتیب شما می تونید کلیه اطلاعات رو بصورت پارامترهایی به SP ها بدین و نتیجه رو بگیرین. این روش از روش قبلی بهتره، چون اولا مشکلات امنیتی یاد شده رو نداره و ثانیا SP ها توسط SQL Server (البته اگه بانکتون SQL Server باشه) میتونن Pre-Compiled بشن تا اجراهای بعدی همون SP سریعتر باشه. اما یه روش دیگه استفاده از Built-in Web Service ای هستش که با SQL Server وجود داره. به این ترتیب شما میتونید اطلاعات مورد نظرتون از طریق HTTP و بصورت SOAP fi به بانک ارسال کرده و نتیجه رو به طریق مشابه دریافت کنید.

----------


## gomnam

سلام دوستان
شاید این بار 10 باشه که تاپیک های مختلفی پیرامون برنامه نویسی چند لایه و خاصه 3 لایه مطرح میشه
اما اگه یه جستجو کرده باشیم میبینیم که همه جوابها فقط توضیحاتی بیش در این زمینه نبوده
چه در این فروم و یا حتی در فروم های دیگه
من این تاپیک را ایجاد کردم تا بدور از هرگونه تئوری دوستان نمونه برنامه های سه لایه ای بنویسن و در این تاپیک بذارن تا مشکلات این روش برنامه نویسی هم مرتفع بشه
حتما هم نیاز نیست که برنامه ها دارای فرم ها و تعداد کلاس های زیادی باشن چون کسی وقت نوشتنش را نداره و همچنین  آنالیز کردن اونا زیاد وقت میبره

چون هدف یاد گرفتن موضوع هست
مثلا برنامه هایی که دارای یه فرم در بخش (presentation layer) و 2 کلاس یکی در بخش business Logic و یکی هم در بخش database (فکر کنم نوشتن یه چنین برنامه هایی کمتر از 10 دقیقه زمان ببره)

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

برای دوستانی که آشنایی با این روش ندارن و میخواهند از لحاظ تئوری خود را قوی کنند میتونن به لینک های زیر مراجعه کنند
https://barnamenevis.org/showth...A7%DB%8C%D9%87

https://barnamenevis.org/showth...A7%DB%8C%D9%87



https://barnamenevis.org/showth...A7%DB%8C%D9%87

همونطور هم که در لینک های بالا میبینین فقط یه سری توضیحات داده شده
ممنون از همگی

----------


## ARA

شاید خوب نگشتی 

https://barnamenevis.org/showth...A7%DB%8C%D8%AA

----------


## Mrs.Net

من یک برنامه چند لایه درست کردم
خوب برام از لایه ها یک dll میسازه و در لایه اجرایی از اونها استفاده میکنه
اما من نمیخوام کاربر به اون dll ها دسترسی داشته باشه یا بتونه ازش استفاده کنه
چیکار باید بکنم؟ اصلا روش یک برنامه چند لایه همین هست؟

----------


## gomnam

> من یک برنامه چند لایه درست کردم
> خوب برام از لایه ها یک dll میسازه و در لایه اجرایی از اونها استفاده میکنه
> اما من نمیخوام کاربر به اون dll ها دسترسی داشته باشه یا بتونه ازش استفاده کنه
> چیکار باید بکنم؟ اصلا روش یک برنامه چند لایه همین هست؟


حتما الزامی نیست که به صورت dll  در بیارینشون
میتونین توی solutionExplorer سه تا folder بسازین برای لایه هاتون و کلاس های مربوط به هر لایه را درون اون بزارین (که زیاد بودن کلاس ها آشفتگی ایجاد نکنه) و از اونا استفاده کنین
اینطوری دیگه دست کاربر را هم میبندین

----------


## Mrs.Net

یکی از مزایای چند پروژه بودن این بودکه جدا کامپایل میکرد و ...
راه دیگه ای نیست جز یکی کردن؟

----------


## mehdi.mousavi

> من یک برنامه چند لایه درست کردم
> خوب برام از لایه ها یک dll میسازه و در لایه اجرایی از اونها استفاده میکنه
> اما من نمیخوام کاربر به اون dll ها دسترسی داشته باشه یا بتونه ازش استفاده کنه
> چیکار باید بکنم؟ اصلا روش یک برنامه چند لایه همین هست؟



سلام.
کلاسهاتون رو internal تعریف کنید. سپس با استفاده از Strong Naming به اونها اسم بدید و اونها رو Sign کنید. در هر یک از Assembly های نامبرده شده، در فایل AssemblyInfo.cs با استفاده از Attribute زیر به Compiler میتونید بگید که internal های assembly فقط در دسترس فلان assembly ها هستن:

[assembly: InternalsVisibleTo("MyNewAssembly")]به این ترتیب internal های کلاستون، فقط در دسترس assembly ای به نام MyNewAssembly خواهند بود.

----------


## Mrs.Net

این String Naming  چجوریه؟ 
آیا تو این حالت حتی توابع هم دیده نمیشوند؟
و اگه یک برنامه دیگه با همون نام اسمبلی باشه میتونه ببینه و استفاده کنه؟

----------


## mehdi.mousavi

> این String Naming  چجوریه؟ 
> آیا تو این حالت حتی توابع هم دیده نمیشوند؟
> و اگه یک برنامه دیگه با همون نام اسمبلی باشه میتونه ببینه و استفاده کنه؟



سلام.
ببخشید، اشتباه نوشتم. منظورم Strong بود، نه String. (تصحیحش کردم). وقتی بهش یه نام از نوع Strong میدین و Sign اش می کنید، برنامه دیگه ای نمیتونه همون اسم رو داشته باشه. در مورد توابع هم باید خدمتتون عرض کنم که توابع internal دیده نخواهند شد.

----------


## sinpin

> حتما الزامی نیست که به صورت dll  در بیارینشون
> میتونین توی solutionExplorer سه تا folder بسازین برای لایه هاتون و کلاس های مربوط به هر لایه را درون اون بزارین (که زیاد بودن کلاس ها آشفتگی ایجاد نکنه) و از اونا استفاده کنین
> اینطوری دیگه دست کاربر را هم میبندین


چرا خیلی - و به 1001 دلیل! - بهتره بصورت DLL کار بشه 
یکی از دلایل لایه بندی  Reuse کردن برخی قسمتها در آینده است و میدونید که Binary Reuse خیلی بهتر از Code Reuse است.

----------


## gomnam

> چرا خیلی - و به 1001 دلیل! - بهتره بصورت DLL کار بشه 
> یکی از دلایل لایه بندی  Reuse کردن برخی قسمتها در آینده است و میدونید که Binary Reuse خیلی بهتر از Code Reuse است.


کد را همیشه میشه تبدیل کرد به dll ولی عکس این کار ممکن امکان پذیر نباشه
کد changeable تر از dll هست
اگه زمانی خواستین کد خود را بهینه کنید ؟ اگه خواستین امکانات دیگه ای به اون اضافه کنید؟فکر کنم با کد راحت تر میشه کار کرد نه؟

البته dll هم مزایایی ویژه و خاص خودش راداره که نباید فراموش کرد

فکر کنم که جواب یکی از اون 1001 دلیلی را که فرمودین دادم
خوشحال میشم اون 1000 تای دیگه را هم بگین تا یه بحث خوب داشته باشیم
موفق باشید

----------


## اَرژنگ

۱ـ اسمه اینها دی.ال.ال نیست! دات نت اسمبلی هستند، دی.ال.ال در دات نت معنی نداره.
۲ـ قابلیت تبدیل دات نت اسمبلی به کد و یا برعکس ربطی به این موضوع ندارد. لایه ای کار کردن در مورد قسمت بندی برنامه است.
۳ـدلیل استفاده از هر لایه به صورت دات نت اسمبلی این است که هر لایه ممکن است که در ماشین و یا برنامه جداگانه‌ای استفاده بشند.
۴ـ اگر پروژه یک نفری‌ است، تمام کد را در یک جا ریختن به صورت مصنوعی لایه بندی کردن با استفاده از دات نت اسمبلی‌ها فرقی نداره، ولی اگر قراره پروژه ادامه پیدا کند و گروه‌هایه مختلف باهاش کار کنند باید درست و حسابی قسمت بندی بشد .

----------


## shotshat

سلام
با پیش فرض گرفتن چند اصل در معماری 3 لایه یک سوال داشتم:
1- لایه ی  Data Access مربوط به دستیابی به اطلاعات است پس دستورات مربوط به اتصال به پایگاه داده و اجرای StoredProcidure ها را در آن می نویسیم
2-لایه ی business logic مربوط به چک کردن شرط ها و قوانین ست
3-لایه ها هم به طور مستقیم با هم می توانند ارتباط داشته باشند نه برعکس یعنی لایه Data Access نمی تواند به لایه business logic دسترسی داشته باشد. 

 ما میخواهیم اطلاعاتی که کاربر وارد کرده را بخوانیم و چک کنیم که اگرID وارد شده توسط فرد موجود باشد بقیه ی اطلاعات را درDataBase ثبت کند
حالا ما باید شرط موجود بودن ID را در لایه business logic  بنویسیم .
تا اینجاش درست. 
ولی چه جوری می تونیم در لایه Data Access  بگیم که اگر شرط چک شده در لایه business درست بود بیا این دستورات رو اجرا کن و اطلاعات رو در دیتابیس Save کن؟
لایه ها که برعکس نمی تونن به هم دسترسی داشته باشن؟

----------


## اَرژنگ

> سلام
> با پیش فرض گرفتن چند اصل در معماری 3 لایه یک سوال داشتم:
> 1- لایه ی Data Access مربوط به دستیابی به اطلاعات است پس دستورات مربوط به اتصال به پایگاه داده و اجرای StoredProcidure ها را در آن می نویسیم
> 2-لایه ی business logic مربوط به چک کردن شرط ها و قوانین ست
> 3-لایه ها هم به طور مستقیم با هم می توانند ارتباط داشته باشند نه برعکس یعنی لایه Data Access نمی تواند به لایه business logic دسترسی داشته باشد. 
> 
> ما میخواهیم اطلاعاتی که کاربر وارد کرده را بخوانیم و چک کنیم که اگرID وارد شده توسط فرد موجود باشد بقیه ی اطلاعات را درDataBase ثبت کند
> حالا ما باید شرط موجود بودن ID را در لایه business logic بنویسیم .
> تا اینجاش درست. 
> ...


شماره ۲ شما کامل نیست!

2-لایه ی business logic مربوط به چک کردن شرط ها و قوانین ست. و بنابر ۳ به لایه داتا اکسس دسترسی دارد، یعنی اینکه اگر قوانین را چک کرد به لایه داتا اکسس دستور میدهد که اطلاعات را در داتبیس ثبت کند. اینکه اطلاعات چگونه در داتابیس ثبت میشود به لایه داتا اکسس مربوط هست.

----------


## once4ever

بطور ساده این لایه BL هست که دستور گرفتن اطلاعات رو ارسال میکنه به لایه دیتا و با مقدیر بدست اومده به لایه خارجی اجازه میده و باز به لایه ی دیتا دستور ثبت اطلاعات میده

----------


## shotshat

لایه business چه جوری می تونه به لایه data access بگه چه کاری بکنه
من برای این کار از کلاس data access آبجکت می گیرم و پارامترهای لازم رو به لایه پاس می کنم
اما اینجا باید چک کنم که آیا ID  وارد شده در database من وجود دارد یا نه
برای این کار باید data reader رو چک کنم برای این کار چون کار چک شدن باید در لایه business logic  باشه و این لایه data reader رو نمی شناسه (چون در لایه data access تعریف شده) در لایه data accessچنین کاری کردم:

    class DAL
    {
        
        private bool _drz;
        public bool Drz
        {
            get{return this._drz;}
            set{this._drz = value;}
        }

        public void Search(string UserName, string PassWord)
        {
            //conection to data base codes...
            dr = cmd.ExecuteReader();
            _drz = dr.Read();
            
        }


و در لایه business :

    class BLL
    {
        public void Search(string UserName, string PassWord)
        {
            DAL obj_DAL = new DAL();
            obj_DAL.Search(UserName, PassWord);
            if (obj_DAL.Drz)
            {
                MessageBox.Show("valid UserName or Password", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
                MessageBox.Show("Invalid UserName or Password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
 
        }

حالا اگر آبجکت گرفتن از کلاس رو توی if بگذارم drz  رو نمی شناسه و اگه بیرون باشه دستورات save کردن اطلاعات که در لایه data access نوشته شده انجام میشه!

امیدوارم گیجتون نکرده باشم و تونسته باشم مشکلم رو درست توضیح بدم.

----------


## اَرژنگ

روش کارتان درست نیست 
به این مثال که در اینجا https://barnamenevis.org/showthread.php?t=81952
گذاشتم یک نگاه بندازید،

----------


## اَرژنگ

> جناب آرژنگ مثالتون رو دیدم. میشه یک کم بیشتر توضیح بدید که کجای روش کارم غلطه؟ 
> یا یک خورده بیشتر راجع به مثالی که گذاشتید توضیح بدید لطفا


من نگفتم روشتان غلطه، فقط اینکه یکمقداری درست نیست
۱)Drz را در لایه داتابیس تعریف کردید. معمولا تمام ابجکتهایه بیزینس را در لایه بیزینس تعریف میکنند (معمولا نه حتما).
۲) دارید از MessageBox.Show در لایه بیزینس استفاده میکنید، فرمهایه نمایشی متعلق به لایه گوئی هستد.
۳) شاید هم روشتان برایه شما معنی داره، شاید من روشتان را درک نمیکنم ، بنابر حرف من اگر روشتان برایه شما کار میکنه ترکش نکنید، بالاخره شما باید با روشتان مدت زیادی کار کنید و اگر یک روشی که برایه شما معنی نداره و مشکل میافرینه (هر چقدر هم بقیه از روشهایه خودشان تعریف کنند) را به روش خودتان که برایه شما کار میکند و درکش میکنید ترجیح بدید مشکلات بیشتری بوجود میاد.
من میگم به روش مثالی که ضمیمه کردم یک نگاه بندازید و اگر به شما ایده میده که چطوری روشتان را بکار بندازید استفاده‌اش کنید.
این مثالی که ضمیمه کردم در پائینش یک دگمه داره که چک میکند نام و فامیل وارد شده در داتابیس هستش و یا نه، مانند شما که میخواهید چک کنید که پسوردی در داتابیس هستش و یا نه. 
از خود کد توضیح‌ بهتر نمیتونم بدم ، به این مثال یک نگاه بندازید و اگر چیزیش به نظر شما معنی نمیداد بپرسید.
من نمیگم که برنامه نویسی ۳ لایه حتما باید این شبیه این مثال باشه، این روشی که "من" بهش عادت دارم و اگر شما فکر میکنید تغییر لازم داره تا برایه شما کار کنه، عوضش کنید و یا فقط به عنوان یک ایده بهش نگاه کنید.
شما پروژه‌ای که باهاش کار میکنید داتابیسش چیه؟ از داتا دزیگنر ویژوال استودیو هم برایه لایه داتا میتوانید کمک بگیرید.

----------


## shotshat

> پروژه‌ای که باهاش کار میکنید داتابیسش چیه؟


دیتابیس من sql هست. فکر کنم مثالهای شما دیتابیسش یک چیز دیگه است چون یکسری دستوراتش (مثل IDataBase,OleCbو...) تا حالا به گوشم نخورده بود که فکر کنم مال اینه که دیتا بیس شما متفاوته.



> دارید از MessageBox.Show در لایه بیزینس استفاده میکنید، فرمهایه نمایشی متعلق به لایه گوئی هستد.


شما که گفتید messageBox باید در لایه GUI باشه، براساس تعریف وظایف لایه ها درسته ولی اگه بخوایم دقیقا طبق تعاریف پیش بریم باید چک کردن تمام شروط در لایه Business باشد ولی در مثال شما در لایه GUI شرطی را چک کرده بودید و براساس نتیجه ان messegebox گذاشته بودید.
من این مشکل را اینطور حل کردم که در کلاسهایی که در لایه business دارم، شروط را چک می کنم و کلاسم یک return value ی boolean داره که بر اساس شرطی که چک شده true یا false می شود و در لایه Gui براساس T یا F بودن ان return value ی کلاس business ، پیام دلخواه صادر می شود.
با این روش هر لایه طبق وظیفه تعریف شده اش عمل می کند ولی به نظر خیلی مسخره میاد که واسه اینکه messegeBox توی لایه Business نباشه یا چک کردن شروط توی لایهperesentation نباشه چند تا if اضافه تر بذاریم. اصلا این پارامتر پاس کردن های زیاد از این لایه به اون لایه باعث کندی برنامه و اتلاف منابع ما نمیشه؟
مشکل دوم هم که در این روش دارم اینه که هر کلاس فقط می تونه یک پارامتر پاس کنه و فقط یک شرط را چک کند مثلا ما برای ثبت یکسری اطلاعات  n تا شرط رو باید چک کنیم . مثلا username تکراری نباشه pass کمتر از 3 تا نباشه id فرد موجود باشه و و و
حالا ما چه جوری می تونیم درست بودن همه این شروط رو با یک کلاس و یک return value نشان بدیم؟

----------


## once4ever

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

----------


## اَرژنگ

> می دونم که خیلی بشتر باید کار کنم. اگر مثال ساده ای از معماری 3 لایه با C#‎ و دیتابیس SQL دارید لطفا بهم بدید چون دیدن مثالها خیلی به آدم کمک می کنه. بدون دیدن یک برنامه که با اصول صحیح نوشته شده آدم همیشه در اشتباه خودش می ماند و فکر هم می کنه که داره راه رو درست میره!


دوست عزیز با این طرز فکرتان خیلی پیشرفت خواهید کرد. متاسفانه یک مثال ساده برایه معماری ۳ لایه نمیشه داد، چونکه مفاهیم زیادو مختلفی در این زمینه مهم هستند.
برایه مثال، چک کردن اینکه کاربر لگین کرده و بستگی به اینکه در چه گروهی چه اختیاراتی داره ، مایکروسافت در دات‌نت ۲.۰ استفاده از پروفایلها را توصیه میکنه.
معماریه ابجکتهایه بیزینسس لایر، داتا لایر و ... استفاده کردن از  Application Blocks بهره میبرند،
http://msdn2.microsoft.com/en-us/library/ms998572.aspx
این لینک را یکی از استادان فرستاده بودند با عرض پوزش که پستشان را پیدا نکردم که بهش لینک بدم.
http://msdn2.microsoft.com/en-us/library/ms978471.aspx

اگر الان دارید با یک پروژه کار میکنید شاید تمام این مفاهیم برایه پروژه شما زیاد باشد. میتوانید همین روشهایی را که استفاده میکنید بهتر کنید و در کنارش هم روشهایی را که مایکراسفت تجویز میکند  را مطالعه کنید.

----------


## اَرژنگ

> سلام
> ایمیل من mfazari89@yahoo.com است.
> از آقای ارژنگ می خوام اگر ممکنه یه کم بیشتر توضیح بدند
> با تشکر


با سلام،
نمیدونم کدام قسمت را توضیح بدم، اگر در مورد برنامه نویسی لایه‌ای میخواهید یاد بگیرید :
http://www.google.com/search?q=C%23+ntier
 برایه شروع و ایده گرفتن از http://asp.net/learn/data-access/ شروع کنید.

پروژه Duwamish هم  http://msdn2.microsoft.com/en-us/library/ms978471.aspx

هم بدرد میخوره

----------


## اَرژنگ

> در بخش نمونه برنامه های همین تالار هم یه نمونه عالی هست


لطفاً‌ آدرس دقیق بدید
من نتونستم پیداش کنم

----------


## hassan razavi

دوستان ببخشید. می دونستم که برنامه رو جناب ارژنگ خان گذاشتند ولی فکر می کردم تو نمونه برنامه ها باشه. کلمه "سه لایه" و ارسال شده توسط "ارژنگ" رو جستجو کردم و پیداش کردم. فکر کنم خودش باشه.
https://barnamenevis.org/showth...A7%DB%8C%D9%87

----------


## razavi_university

> با سلام،
> نمیدونم کدام قسمت را توضیح بدم، اگر در مورد برنامه نویسی لایه‌ای میخواهید یاد بگیرید :
> http://www.google.com/search?q=C%23+ntier
>  برایه شروع و ایده گرفتن از http://asp.net/learn/data-access/ شروع کنید.
> 
> پروژه Duwamish هم  http://msdn2.microsoft.com/en-us/library/ms978471.aspx
> 
> هم بدرد میخوره


آرژنگ جان لینک‌هایی که گذاشتی بیشتر مربوط به ASP بودند 
یعنی لایه سوم ASP بود
مقاله‌ای یا پروژه‌ای داری که 3 لایه فقط در WinApp و DataBase باشد.
ممنون

----------


## Masoud_TB

اگر می خواهی برنامه نویسی Object Oriented رو شروع کنی به این وبلاگ یه سر بزن:

ttp://csharptuning.blogfa.com

راه درازی در پیش داری ولی به رفتنش میارزه

----------


## اَرژنگ

> آرژنگ جان لینک‌هایی که گذاشتی بیشتر مربوط به ASP بودند 
> یعنی لایه سوم ASP بود
> مقاله‌ای یا پروژه‌ای داری که 3 لایه فقط در WinApp و DataBase باشد.
> ممنون


برایه پروژه‌هایه WinApp از داتا بایندینگ چیزه بیشتری لازم نیست.

----------


## اَرژنگ

> اگر می خواهی برنامه نویسی Object Oriented رو شروع کنی به این وبلاگ یه سر بزن:
> 
> ttp://csharptuning.blogfa.com
> 
> راه درازی در پیش داری ولی به رفتنش میارزه


 Object Oriented و برنامه‌نویسی لایه‌ای چیزهایه متفاوتی هستند ولی  Object Oriented بدانه دانستن Design Patterns به تنهایی هیچ چی نیست.
 Object Oriented تازه شروع کار است و به دانستنش حتما میارزه.

----------


## آرش2020

> من یه نمونه دارم که از معماری سه لایه استفاده شده . البته نمیدونم به دردت میخوره یا نه؟ خواستم برات ضمیمه کنم اما خطم مشکل داره نمیتونم . اگه لازم داری mail بده واست بفرستم.


 
ممکنه برنامه ای که گفتید رو برای من SEND کنید.ایمیل من:
erorarash_2020@yahoo.com

----------


## آرش2020

لطفا اگر کسی برنامه سه لایه داره برای منم SEND کنه ممنون می شم.ایمیل من:
erorarash_2020@yahoo.com

----------


## اَرژنگ

> لطفا اگر کسی برنامه سه لایه داره برای منم SEND کنه ممنون می شم.ایمیل من:
> erorarash_2020@yahoo.com


https://barnamenevis.org/showth...%8C#‎post429815
این یک مثال ساده است، در اصل برایه برنامه نویسی ۳ لایه نیست ولی در برنامه نویسی ۳ لایه پیاده شده. برایه شروع و ایده گرفتن بد نیست.

----------


## Masoud_TB

Design Pattern مفاهیم طراحی هستند به بیشتر به درد کسانی می خورد که می خواهند سیستم طراحی کنند. 
این که Object Oriented رو بفهمی پیش نیاز اینه که بخواهی الگو های طراحی رو بشناسی. خیلی خوشحالم که اینجا صحبت از الگو های طراحی میشه و البته امیدوارم که همونقدری که صحبت هم میشه ازش استفاده هم بشه. 

اما باید بگم که هر برنامه نویسی باید Object Oriented Programming رو بدونه اما مفاهیم Object Oriented Analysis & Design به درد هر برنامه نویسی نمی خوره که Design Pattern و Analysis Patterns هم از اوناست.

باید به عنوان کسی که چندین ساله که تدریس سی شارپ رو برای موسسات و سازمان ها و افراد بسیار انجام داده باید بگم که متاسفانه ما هنوز به Object Oriented Programming  مشکل داریم چه برسد به Design Pattern. و بنده شاهدم که 90 درصد کسانی که سر کلاس های Design Pattern می نشینن فقط به خاطر دریافت مدرک اون اومدند اگر فقط و فقط 15 درصد مطالب رو یاد بگیرند باید بهشون گفت دست مریزاد.

دوست عزیز اگر هدف آموزش است (نه ...) به کسی که تازه می خواد برنامه نویسی اصولی رو شروع کنه نباید انقدر مثال پیچیده ای مثل Design Pattern رو تو صورتش بزنیم که اصلا ناامید بشه و فکر کنه که هیچ. وقتی ما هنوز تو آموزش مفهوم کلاس و object مشکل داریم بیایم بگیم Abstract Factory چیه!!!

----------


## اَرژنگ

اشکال OOP بدانه داشتن OODP مانند داشتن کلمات و دستور زبان خالی میماند. اگرچه تمام زبان را میشه با کلمات و دستور زبان ساخت ولی تا زمانی که کسی پاراگراف و یا یک داستان کامل را نخوانده باشد ، هرچی کلمات و دستور زبان هم بداند نمیتونه یک نوشته کامل سرهم کند.

خصوصیات Object Oriented Programming خودش محتوایه چندین نوع پترن است و در زمان برنامه نویسی Procedural که قدیمها رایج بود این خصوصیات را به شکل مصنوعی برنامه نویسی میکردند. منتها به خاطر فوایدی که داشتند از قسمت برنامه نویسی کشیدنشان بیرون و جزوه زبانشان کردند. 

Design Pattern پیچیده نیستند، یاد گرفتن برنامه نویسی شئیگرا بدانه Design Pattern ها مانند یاد گرفتن زبان انگلیسی فقط با داشتن لغاتش و دستور زبان است، کسی تا مثلهایه سرهم کردن کلمات را در پاراگرافها و موضوعات کامل نبینید مگر زبان یاد میگیره؟

برنامه نویسی هم فرقی ندارد، اگر به یکی آجر چین را یاد بدیم باید بهش اینکه چطوری ۲ تا دیوار را کنار هم بگذارد را هم یاد داد (حالا لازم نیست اینکه ساختمان کامل خه ریختی میشد را بدانند، آرکیتکت برایه همین کار است.)

به جز پترنها ، ضد پترنها هم هستند (anti patterns) و کسانیکه که از هر دویه اینها خبر ندارند مدوما نه اینکه دوباره چرخ رو اختراع میکنند ، بله اشتباهش را درست میکنند، برایه مثال مدواما باید اینکه چرا نباید از یک کلاس استاتیک برایه رد و بدل کردن اطلاعات استفاده بشد را در همین فروم بارها سره و کله بزنیم، اینها حتا مفاهیم شئیگرائی را هم نمیفهمند و بعدش بدانه دانستن روشهایه درست استفاده از اصول شئیگرایی (Design Patterns) آستینهاشان را بال میزنند و میفتند به جانه کد.

----------


## Mahdi.Kiani

> سلام
> من خیلی دوست دارم این LINQ رو بشناسم میشه یه کم توضیخ بدی که فرقش با روش های قبلی چیه و چه حسنی داره؟


یکی از بهترین مقاله ها ، مقاله خود hejlsbeg هست.
من اونو به صورت pdf در اوردم و آپلود کردم . دوستان می تونن استفاده کنند.

have fun

----------


## Mahdi.Kiani

این هم دو تا مقاله دیگه
 اولی مربوط به LINQ To Sql
و دومی مروبط به LINQ To XML
موفق باشید

----------


## اَرژنگ

http://channel9.msdn.com/Showpost.aspx?postid=114680
http://channel9.msdn.com/Showpost.aspx?postid=202138
http://davidhayden.com/blog/dave/arc...Tutorials.aspx

----------


## sinpin

> سلام
> من خیلی دوست دارم این LINQ رو بشناسم میشه یه کم توضیخ بدی که فرقش با روش های قبلی چیه و چه حسنی داره؟


جهت یک آشنایی مختصر :
https://barnamenevis.org/showpo...7&postcount=75

این لینک خوبیه :
http://blogs.msdn.com/charlie/archiv...log-index.aspx

----------


## sinpin

> اگر دارید با دات نت ۳.۰ کار میکنید بیخیال این روشها دیگر قدیمی شدند، روشهایه جدید از LINQ استفاده میکنند.


*An Example of a Multi Tier Architecture for Linq to Sql*
 http://code.msdn.microsoft.com/multitierlinqtosql

----------


## اَرژنگ

> سوال در مورد برنامه چند لایه و درخواست نمونه بود ولی متاسفانه بحث منحرف شد.


http://code.msdn.microsoft.com/multitierlinqtosql

----------


## sasanazizi

BARNAMEH NEVISI 3 LAYER

----------


## Alen

من تازه دارم راجع به معماری 3 لایه چیزهایی یاد میگیرم
یه جا خوندم که فقط لایه UI روی کلاینت ها قرار میگیره و دو لایه دیگه بر روی سرور هستند
آیا این درسته؟
در این صورت باید از socket programing استفاده کنم یا راه حل دیگه برای دسترسی به متدهای اون دولایه که روی سرور هستند وجود داره؟
ببخشید اگه سوالم مبتدیانه هستش چون تازه کارم

----------


## mojtaba.kaviani

واقعا این برنامه های نوشته شده تا حالا سه لایه است؟

ولاگ من در مورد برنامه های چند لایه حتما ببینید و ادامه دارد!!

نوشته های فنی و شخصی من

----------


## SAMANEH_E

تو مباحثoopیکی از اجزا اون کپسوله سازی (یعنی نیازهای مسئله:property,method,field,.....)تو لایه بعد استفاده و به کارگیری از ایناست.

----------


## Green Way

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

----------


## Green Way

سلام 
ممنون از این همه راهنمایی ها ی خوبتون
دانشجوی ترم آخر کارشناسیم 
پروژه آخرم باید با سی شارپ و برنامه نویسی سه لایه باشه
هیچ اطلاعاتی ندارم . سی شارپ رو دارم می خونم اما نمی دونم برنامه نویسی سه لایه چطوری هستش
لطفا کمکم کنید
کتابی معرفی کنید که بتونم با خوندش برنامه نویسی سه لایه رو انجام بدم ممنونم
آقای عسگری سایت بهم اجازه نمی ده بهتون پیام بفرستم مجبورم همین جا بنویسم.
خواهش می کنم در مورد برنامه نویسی سه لایه کتابی جامع معرفی کنید. سی شارپ رو دارم می خونم ولی از این برنامه نویسی سه لایه سر در نمیارم. استاد هم سایت با سی شارپ و برنامه نویسی سه لایه می خواد . تازه LINQ رو هم ازمون می خواد . می خوام واقعا رو پروژه ام کار کنم . اما فعلا فقط توضیح در مورد سه لایه دیدم. مثل کتاب سی شارپ کتابی که بخواد در این زمینه کمک کنه پیدا نکردم. درمورد LINQ هم کمکم کنید. جسارت من رو می بخشید اما Gmail من اینه :Ameneh.Reza@Gmail.com
می بخشید چاره ای نداشتم اینجا نوشتم

----------


## اَرژنگ

> BARNAMEH NEVISI 3 LAYER


 این مثال خوبی نیست، GUI با داتابیس مستقیماً ارتباط دارد، برایه شروع یک مثال ساده به این 
https://barnamenevis.org/showth...137#post952137
یک نگاه بندازید.

----------


## Green Way

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

----------


## اَرژنگ

> آرژنگ جان لینک‌هایی که گذاشتی بیشتر مربوط به ASP بودند 
> یعنی لایه سوم ASP بود
> مقاله‌ای یا پروژه‌ای داری که 3 لایه فقط در WinApp و DataBase باشد.
> ممنون


 این یک مثال ساده است که برایه شروع و راه انداختن بکار بیاد، https://barnamenevis.org/showth...137#post952137

----------


## اَرژنگ

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


 لایه سازی برنامه نوشتن چیزی نیست که در یک کتاب باشد، اگر بشه که برنامه را به قسمتهایه منطقی تقسیم کرد و هر قسمت وظائف مشخصی را داشته باشند و حداقل مقدار وابستگی بینشان ایجاد بشه.
برایه لایه بندی واقعی استفاده از WCF لازم است، ولی برایه یک مثال ساده یک لایه بندی منطقی به این مثال نگاه بندازید. https://barnamenevis.org/showth...137#post952137
در همین توپیک لینکهایه زیادی به پروژه‌هایه مختلف فرستاده شده، ولی از زمانیکه این توپیک شروع شده بود تا الان روشهایه جدیدتری درآمدند که استفاده‌ازشان زمان میبره و نمیشه در یک کتاب جمعشان کرد، بعضی از تکنیکها به اندازه‌ای نوینند که هنوز کتابی درموردشان چاپ نشده.
برنامه‌نویسی لایه‌ای بیشتر یک ایده‌ات تا یک روش بخصوص پیاده کردن، و بنا بر مختصات پروژه نحوه پیداه شدنش تغییر میکنه.

----------


## Freydoonk

با سلام
در مورد مفاهيم برنامه نويسي چند لايه بايد اينطور بگم كه ما پدوژه اي رو كه روش كار ميكنيم به معمولا سه بخش تقسيم بندي ميكنيم UI(View),dataAccess,Business
تو UI تنها فرم هامون رو طراحي ميكنيم
تو dataAccess دستورات مربوط به ديتابيس رو مينويسيم 
و تو Business رابط بين دو لايه بالا است
اين معماري به صورت 4 لايه 5 لايه نيز وجود داره كه تقسيم بندي رو با جزئيلت بيشتري انجام ميده.
در مورد مثال هم عرض كنم كه فعلا اين كار استاندارد خاصي نداره و معمولا سليقه اي انجام ميشه.

----------


## اَرژنگ

> با سلام
> در مورد مفاهيم برنامه نويسي چند لايه بايد اينطور بگم كه ما پدوژه اي رو كه روش كار ميكنيم به معمولا سه بخش تقسيم بندي ميكنيم UI(View),dataAccess,Business
> تو UI تنها فرم هامون رو طراحي ميكنيم
> تو dataAccess دستورات مربوط به ديتابيس رو مينويسيم 
> و تو Business رابط بين دو لايه بالا است
> اين معماري به صورت 4 لايه 5 لايه نيز وجود داره كه تقسيم بندي رو با جزئيلت بيشتري انجام ميده.
> در مورد مثال هم عرض كنم كه فعلا اين كار استاندارد خاصي نداره و معمولا سليقه اي انجام ميشه.


پیاده‌ ریزیش ممکنه سلیقه‌ای باشد ولی خصوصیاتی را که خودتان نام بردید باید داشته باشد، اینهم را باید اضافه کرد که :
GUI بر Business وابستگی دارد.
GUI بر Database نباید وابستگی داشته باشد.(نمیتواند مستقیم با داتابیس ارتباط برقرار کند، و در مورد داتابیس هیچ اطلاعاتی نباید داشته باشد).
Business  بر Database وابستگی دارد.
Business  بر GUI نباید وابستگی داشته باشد.
Database به Business و GUI نباید وابستگی داشته باشد.(به جز با اینکه کارهایه داتابیسی انجام بده هیچ اطلاعاتی در مورد بیزینس و یا گویی ندارد).

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

----------


## Green Way

> لایه سازی برنامه نوشتن چیزی نیست که در یک کتاب باشد، اگر بشه که برنامه را به قسمتهایه منطقی تقسیم کرد و هر قسمت وظائف مشخصی را داشته باشند و حداقل مقدار وابستگی بینشان ایجاد بشه.
> برایه لایه بندی واقعی استفاده از WCF لازم است، ولی برایه یک مثال ساده یک لایه بندی منطقی به این مثال نگاه بندازید. https://barnamenevis.org/showth...137#post952137
> در همین توپیک لینکهایه زیادی به پروژه‌هایه مختلف فرستاده شده، ولی از زمانیکه این توپیک شروع شده بود تا الان روشهایه جدیدتری درآمدند که استفاده‌ازشان زمان میبره و نمیشه در یک کتاب جمعشان کرد، بعضی از تکنیکها به اندازه‌ای نوینند که هنوز کتابی درموردشان چاپ نشده.
> برنامه‌نویسی لایه‌ای بیشتر یک ایده‌ات تا یک روش بخصوص پیاده کردن، و بنا بر مختصات پروژه نحوه پیداه شدنش تغییر میکنه.


سلام 
ممنون از راهنمایی خوبتون 
با این توصیف من باید در برنامه نویسی تسلط پیدا کنم تا این مفهوم رو بهتر درک کنم.
بازم تشکر که توجه کردید.
 :لبخند:

----------


## bensaeed

سلام
این تصویر خیلی میتونه بدردتون بخوره...
حتما نگاش کنید...
 :چشمک:   :قلب: 


خواهش میکنم. :خجالت:

----------

