با سلام به دوستان عزیز
شنیدم که میگن میشه در دات نت بصورت چند لایه ( چند سطحی ) برنامه نوشت . میخوام بدونم برنامه نویسی چند لایه یعنی چی ؟! . اگر یک مثال ساده و یک مثال نیمه سخت بزنید ممنون میشم.اگه کد هم داشته باشه که خیلی عالی میشه.
Printable View
با سلام به دوستان عزیز
شنیدم که میگن میشه در دات نت بصورت چند لایه ( چند سطحی ) برنامه نوشت . میخوام بدونم برنامه نویسی چند لایه یعنی چی ؟! . اگر یک مثال ساده و یک مثال نیمه سخت بزنید ممنون میشم.اگه کد هم داشته باشه که خیلی عالی میشه.
به برنامه هایی که به چند قسمت کلی تقسیم میشن و هر قسمت در یک لایه مجزا اجرا میشه ولی مجموعه همه این قسمتها با هم برنامه رو تشکیل میدن برنامه های چند لایه میگن. معمولا برنامه ها 3 لایه یا 5 لایه هستند. برنامه های 3 لایه شامل Presentation Layer و Business Logic Layer و Database Layer میشوند و در برنامه های 5 لایه هم لایه منطق تجاری برنامه رو به 3 لایه دیگر تقسیم میکنند.
بله . متشکرم از شما . اما آیا در جاوا که .NET نداره میشه چند سطحی نوشت ؟
کسانی که از جاوا استفاده میکنند برای این کار از J2EE استفاده میکنند.
ممنون از اینکه جواب دادید(همه دوستان). اما این چیزی که شما گفتید تغریبا فقط ترجمه چند سطحی بود.شایدم من یه کم .... دیر میفهمم . میشه لطفا بیشتر راهنمایی کنید.
خوب یک مدل ساده برنامه که شامل 3 لایه باشه معمولا به این صورت طراحی میشه. فرض کنید یک شرکت یک شیکه LAN داخلی که کامپیوترهای اون رو به هم متصل میکنه داره. برای نوشتن یک برنامه 3 لایه که بتونه کارهای مختلف اون شرکت رو مدیریت کنه به صورت زیر عمل میکنند. لایه اول همونطور که گفتم Presentation Layer یا لایه ارایه دهنده است که معمولا رابط کاربری که در کامپیوتر کلاینتها نمایش داده میشه مد نظره. لایه دوم Business Logic Layer یا لایه ای است که منطق تجاری برنامه و طریقه عملکرد اون در این لایه قرار میگیره. لایه سوم هم Database Layer یا لایه بانک اطلاعاتی است که معمولا شامل یک یا چند سرور بانک اطلاعاتی میشه که اطلاعات مربوط به برنامه رو نگهداری میکنند. لایه دوم در حقیقت اطلاعات خواسته شده توسط کاربران لایه اول رو از لایه بانک اطلاعاتی دریافت میکنه و بعد از تجزیه و تحلیل اونها رو به کاربر نمایش میده
توسعه یک نرم افزار چند لایه ارتباطی به زبان و یا حتی platform کد نویسی نداره. در مورد این مساله در زمان طراحی نرم افزار بحث میشه. امکان داره که هر لایه در یک بستر کاملا جدا توسعه داده بشه. حتی در یک لایه ممکنه از 2 بستر یا زبان مختلف استفاده بشه. این یک تکنولژی جدید نیست که در دات نت استفاده شده باشه یا مثلا در VS 6 نشه چند لایه نوشت. از تکنولژی های خیلی قدیمی که بوجود آوردن یک ساختار چند لایه رو تسهیل می کردن میشه به MTS در NT4 اشاره کرد .
این مساله کاملا یک مفهوم است.
حرف شما کاملا درسته من هم در هیچ قسمتی خلاف این موضوعات رو ذکر نکردم.نقل قول:
توسعه یک نرم افزار چند لایه ارتباطی به زبان و یا حتی platform کد نویسی نداره. در مورد این مساله در زمان طراحی نرم افزار بحث میشه. امکان داره که هر لایه در یک بستر کاملا جدا توسعه داده بشه. حتی در یک لایه ممکنه از 2 بستر یا زبان مختلف استفاده بشه. این یک تکنولژی جدید نیست که در دات نت استفاده شده باشه یا مثلا در VS 6 نشه چند لایه نوشت. از تکنولژی های خیلی قدیمی که بوجود آوردن یک ساختار چند لایه رو تسهیل می کردن میشه به MTS در NT4 اشاره کرد .
این مساله کاملا یک مفهوم است.
باز هم تشکر از دوستان . ولی میشه لطفا یک مثال پیاده سازی شده به من معرفی کنید. که من بتونم ببینم چیه !!. در واقع دنبال یک نمونه برنامه, پیاده سازی شده هستم که کد نویسی شده باشه. ( البته در دات نت ). من بتونم Download کنم و اجرا کنم و Source برنامه را هم بتونم ببینم . دو تا مثال میخوام یکی سخت و یکی آسون .
سلام من می خواستم درمورد لایه بندی اطلاعاتی داشته باشم لطفآ اگر کسی مطلبی یا لینکی دارد واسم بفرسته
ساده ترین شکل اون داشتن سه لایه UI و BR و DA هست.
1- در این لایه شما فقط مسایل مربوط به نمایش اطلاعات رو انجام میدید. به عبارت دیگه چیزی که کاربر قراره ببینه.
2-لایه تصمیم گیری و قواعد کاری. مثلا آیا این کاربر مجاز به دیدند این اطلاعات هست یا نه ؟ و فرمولهای محاسبه.
3-این لایه هم که از اسمش پیداست . لایه مربوط به انجام کارهای دیتابیس. عملیات مربوطه.
البته این شکل ساده مسال هستش و در دنیای واقعی این لایه ها افزایش پیدا میکنند.
"لایه" با "چند سطحی" یکیه؟
در این مورد منبع تکمیلی؟
ممنون
این هم منبع :
http://rapidshare.de/files/4520398/1...Tiers.pdf.html
در مورد لایه بندی و برنامه نویسی لایه ای فقط یکسری اطلاعات تئوری دارم آیا کسی به طور عملی اینکاررا در پیش گرفته ؟؟
آیا نمونه کد و یا نمونه برنامه ای هست ؟ و یا اگر ممکنه دوستان راهنمایی کنند که برای برنامه نویسی به این طریق چه روندها و مراحلی باید طی شود ؟؟
البته لینک در قسمت قبل باز نمیشد. اگر منبعی برای دریافت اطلاعات بیشتری هست ، لطفاً مرا راهنمایی کنید.
این لینک که باز نمیشه! فایل وجود نداره. اگه لطف کنید و آپلود کنید ممنون میشم.
با تشکر.
می تونید از مثال Duwamish که ماله خود مایکروسافت هست استفاده کنید. البته مربوط به 2003 هست.
خیلی عالی نیست ولی برای شروع کار چندلایه خوبه.
اگه دات نت 2003 نصب کردید توی همچین آدرسی هست :
D:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples
اگه هم نداریدش از اینجا دانلود کنید:
http://www.microsoft.com/downloads/d...displaylang=en
دوستان من می خوام برنامه نویسی #C و بانک های اطلاعاتی شروع کنم که چند تا سوال برام پیش اومده
1- اولاً دقیقاً نمی دونم از اکسس استفاده کنم یا از sql server ، فکر می کنم اکسس راحت تره ولی نوشته های دوستان رو که می خوندم انگار محدویت هائی رو داره که sql server نداره می خوام بدونم آیا اکسس 2007 هم همین محدودیت ها رو داره ؟
2- ضمناً من نمیدونم برای استفاده از SQL SERVER حتما باید نرم افزارش رو به ویندوزم نصب کنم یا اگه فقط ویژوال استودیو دات نت 2005 رو نصب کنم کافیه ، آخه انگار اونم Sql server داره و اینکه بعد از نصب روش استفاده اونم مثل اکسسه ؟
3- و بعد اینکه من چطوری می تونم یه منبع خوب درباره sql و یا روش استفاده از بانک های اطلاعاتی در سی شارپ بدست بیارم ، آیا می تونم از MSDN ویژوال استودیو 2005 استفاده کنم یا نه ؟
لطفاً رهنمائیم کنید . ( لطفا جوابهاتونو با دلیل بفرمائید ، برام مهمه )
مرســــــــــــــــــــــ ــــی
1) استفاده از اکسس یا SQL Server بیشتر به محیطی که قراره برنامه نهایی در اون مورد استفاده قرار بگیره، تعداد کاربرانی که می خوان در هر لحظه از داده های درون بانک استفاده کنن، مقدار و حجم اطلاعاتی که در بانک ذخیره می شه، حجم انتقال اطلاعات بانک با لایه های دیگه برنامه و ... بستگی داره. اگر فقط به عنوان یادگیری می خواهید بدونید، بهتره به هر دوی این محیط ها آشنا بشید. به این صورت خودتون متوجه می شید که کجا بهتره از چه DBMS ای استفاده کنید. در این سایت مقایسه های زیادی در مورد تفاوت موجود در بانکهای اطلاعاتی وجود داره، می تونید از اونها هم استفاده کنید تا تفاوت نسخه های بانکهای اطلاعاتی رو بهتر درک کنید.
2) استفاده از SQL Server مقداری با Access تفاوت داره. نسخه ای از SQL Server که همراه با VS نصب می شه برای کارهای آموزشی و ابتدایی می تونه نیازتون رو برطرف کنه، اما برای برنامه های واقعی، لازم دارید که از یکی از نسخه های SQL Server (به جز Express) استفاده کنید.
3) اگر به انگلیسی تسلط دارید، کتابهای خوبی برای آموزش این موارد وجود داره که می تونید از اونها استفاده کنید. البته پیشنهاد می کنم اول روی محیطی که می خواهید در اون برنامه نویسی کنید تسلط پیدا کنید، بعد به سراغ بانکهای اطلاعاتی برید.
موفق باشید.
اگر در مورد کار با بانک access نمونه برنامه خواستید بگید براتون میزارم ...
البته فکر کنم توی « نمونه برنامه های #C » بتونی پیدا کنی ....
با سلام خدمت دوستان
و با اجازه از استاد ثباتی
اکسس در ابتدا به عنوان یک سیستم دیتابیس طراحی نشده و هنوزم که انقدر مثلا پیشرفت کرده در رده دیتابیس سیستمها قرار نمیگیره ...
اکسس برای طراحی دیتابیسهای شخصی افراد بر روی ویندوز درست شده با اینکه میشه ازش برای برنامه نویسی هم استفاده کرد ولی فکر نمیکنم کار درست و منطقی باشه
سلام به همگی دوستان
می شه یه Sample برای برنامه نویسی 2 لایه یا 3 لایه تحت Win Application به من یاد بدین یا بگین برم از کجا Download کنم . مثلاً database من Sql هست می خوام از یه جدول Select کنم و داخل Data gridView نشون بدم . نمی نمدونم چه جوری لایه ای بنویسم .
ممنون می شم اگه راهنماییم کنید .
دوست عزیز
سلام
شما باید اول مشخص کنی بر اساس نیاز های سیستمت از کدام یکی از روش ها می خوای برنامه چند لایه بنویسی.
مثلاً WebService یا WinService یا ...
بهتره اول یک سری اطلاعات پایه رو مطالعه کنی.
بعد بر اساس نیازها و امکانات سیستم روشت رو انتخاب کنی .
بعد روی اون روش بصورت جدی کار کنی.
می خواستم Winservice باشه اما لایه ای بلد نیستم .
سلام
شما اول نوشتن WinService رو خوب مطالعه کن.
بعد روی multi tier مطالعه کن.
در نهایت این دو تا رو با هم تلفیق کن.
یه نمونه خیلی خوب پروژه Dwamish هست که می تونی از سایت Microsoft بگیریش
اگه بخام از معماری سه لایه استفاده کنم باید از کلاس استفاده کنم سوال من این است باید همه چیزهایی که می خاهم در پایگاه داده ذخیره کنم به عنوان پارامتر بفرستم یا راه دیگه ای هم داره؟
متشکرم
سلام.
شما مگه می تونید تو 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 به بانک ارسال کرده و نتیجه رو به طریق مشابه دریافت کنید.
سلام دوستان
شاید این بار 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
همونطور هم که در لینک های بالا میبینین فقط یه سری توضیحات داده شده
ممنون از همگی
شاید خوب نگشتی
https://barnamenevis.org/showth...A7%DB%8C%D8%AA
من یک برنامه چند لایه درست کردم
خوب برام از لایه ها یک dll میسازه و در لایه اجرایی از اونها استفاده میکنه
اما من نمیخوام کاربر به اون dll ها دسترسی داشته باشه یا بتونه ازش استفاده کنه
چیکار باید بکنم؟ اصلا روش یک برنامه چند لایه همین هست؟
یکی از مزایای چند پروژه بودن این بودکه جدا کامپایل میکرد و ...
راه دیگه ای نیست جز یکی کردن؟
سلام.
کلاسهاتون رو internal تعریف کنید. سپس با استفاده از Strong Naming به اونها اسم بدید و اونها رو Sign کنید. در هر یک از Assembly های نامبرده شده، در فایل AssemblyInfo.cs با استفاده از Attribute زیر به Compiler میتونید بگید که internal های assembly فقط در دسترس فلان assembly ها هستن:
[assembly: InternalsVisibleTo("MyNewAssembly")]به این ترتیب internal های کلاستون، فقط در دسترس assembly ای به نام MyNewAssembly خواهند بود.
این String Naming چجوریه؟
آیا تو این حالت حتی توابع هم دیده نمیشوند؟
و اگه یک برنامه دیگه با همون نام اسمبلی باشه میتونه ببینه و استفاده کنه؟
کد را همیشه میشه تبدیل کرد به dll ولی عکس این کار ممکن امکان پذیر نباشه
کد changeable تر از dll هست
اگه زمانی خواستین کد خود را بهینه کنید ؟ اگه خواستین امکانات دیگه ای به اون اضافه کنید؟فکر کنم با کد راحت تر میشه کار کرد نه؟
البته dll هم مزایایی ویژه و خاص خودش راداره که نباید فراموش کرد
فکر کنم که جواب یکی از اون 1001 دلیلی را که فرمودین دادم
خوشحال میشم اون 1000 تای دیگه را هم بگین تا یه بحث خوب داشته باشیم
موفق باشید
۱ـ اسمه اینها دی.ال.ال نیست! دات نت اسمبلی هستند، دی.ال.ال در دات نت معنی نداره.
۲ـ قابلیت تبدیل دات نت اسمبلی به کد و یا برعکس ربطی به این موضوع ندارد. لایه ای کار کردن در مورد قسمت بندی برنامه است.
۳ـدلیل استفاده از هر لایه به صورت دات نت اسمبلی این است که هر لایه ممکن است که در ماشین و یا برنامه جداگانهای استفاده بشند.
۴ـ اگر پروژه یک نفری است، تمام کد را در یک جا ریختن به صورت مصنوعی لایه بندی کردن با استفاده از دات نت اسمبلیها فرقی نداره، ولی اگر قراره پروژه ادامه پیدا کند و گروههایه مختلف باهاش کار کنند باید درست و حسابی قسمت بندی بشد .
سلام
با پیش فرض گرفتن چند اصل در معماری 3 لایه یک سوال داشتم:
1- لایه ی Data Access مربوط به دستیابی به اطلاعات است پس دستورات مربوط به اتصال به پایگاه داده و اجرای StoredProcidure ها را در آن می نویسیم
2-لایه ی business logic مربوط به چک کردن شرط ها و قوانین ست
3-لایه ها هم به طور مستقیم با هم می توانند ارتباط داشته باشند نه برعکس یعنی لایه Data Access نمی تواند به لایه business logic دسترسی داشته باشد.
ما میخواهیم اطلاعاتی که کاربر وارد کرده را بخوانیم و چک کنیم که اگرID وارد شده توسط فرد موجود باشد بقیه ی اطلاعات را درDataBase ثبت کند
حالا ما باید شرط موجود بودن ID را در لایه business logic بنویسیم .
تا اینجاش درست.
ولی چه جوری می تونیم در لایه Data Access بگیم که اگر شرط چک شده در لایه business درست بود بیا این دستورات رو اجرا کن و اطلاعات رو در دیتابیس Save کن؟
لایه ها که برعکس نمی تونن به هم دسترسی داشته باشن؟
شماره ۲ شما کامل نیست!
2-لایه ی business logic مربوط به چک کردن شرط ها و قوانین ست. و بنابر ۳ به لایه داتا اکسس دسترسی دارد، یعنی اینکه اگر قوانین را چک کرد به لایه داتا اکسس دستور میدهد که اطلاعات را در داتبیس ثبت کند. اینکه اطلاعات چگونه در داتابیس ثبت میشود به لایه داتا اکسس مربوط هست.
بطور ساده این لایه BL هست که دستور گرفتن اطلاعات رو ارسال میکنه به لایه دیتا و با مقدیر بدست اومده به لایه خارجی اجازه میده و باز به لایه ی دیتا دستور ثبت اطلاعات میده
لایه 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 در لایه بیزینس استفاده میکنید، فرمهایه نمایشی متعلق به لایه گوئی هستد.
۳) شاید هم روشتان برایه شما معنی داره، شاید من روشتان را درک نمیکنم ، بنابر حرف من اگر روشتان برایه شما کار میکنه ترکش نکنید، بالاخره شما باید با روشتان مدت زیادی کار کنید و اگر یک روشی که برایه شما معنی نداره و مشکل میافرینه (هر چقدر هم بقیه از روشهایه خودشان تعریف کنند) را به روش خودتان که برایه شما کار میکند و درکش میکنید ترجیح بدید مشکلات بیشتری بوجود میاد.
من میگم به روش مثالی که ضمیمه کردم یک نگاه بندازید و اگر به شما ایده میده که چطوری روشتان را بکار بندازید استفادهاش کنید.
این مثالی که ضمیمه کردم در پائینش یک دگمه داره که چک میکند نام و فامیل وارد شده در داتابیس هستش و یا نه، مانند شما که میخواهید چک کنید که پسوردی در داتابیس هستش و یا نه.
از خود کد توضیح بهتر نمیتونم بدم ، به این مثال یک نگاه بندازید و اگر چیزیش به نظر شما معنی نمیداد بپرسید.
من نمیگم که برنامه نویسی ۳ لایه حتما باید این شبیه این مثال باشه، این روشی که "من" بهش عادت دارم و اگر شما فکر میکنید تغییر لازم داره تا برایه شما کار کنه، عوضش کنید و یا فقط به عنوان یک ایده بهش نگاه کنید.
شما پروژهای که باهاش کار میکنید داتابیسش چیه؟ از داتا دزیگنر ویژوال استودیو هم برایه لایه داتا میتوانید کمک بگیرید.
دیتابیس من sql هست. فکر کنم مثالهای شما دیتابیسش یک چیز دیگه است چون یکسری دستوراتش (مثل IDataBase,OleCbو...) تا حالا به گوشم نخورده بود که فکر کنم مال اینه که دیتا بیس شما متفاوته.نقل قول:
پروژهای که باهاش کار میکنید داتابیسش چیه؟
شما که گفتید messageBox باید در لایه GUI باشه، براساس تعریف وظایف لایه ها درسته ولی اگه بخوایم دقیقا طبق تعاریف پیش بریم باید چک کردن تمام شروط در لایه Business باشد ولی در مثال شما در لایه GUI شرطی را چک کرده بودید و براساس نتیجه ان messegebox گذاشته بودید.نقل قول:
دارید از MessageBox.Show در لایه بیزینس استفاده میکنید، فرمهایه نمایشی متعلق به لایه گوئی هستد.
من این مشکل را اینطور حل کردم که در کلاسهایی که در لایه business دارم، شروط را چک می کنم و کلاسم یک return value ی boolean داره که بر اساس شرطی که چک شده true یا false می شود و در لایه Gui براساس T یا F بودن ان return value ی کلاس business ، پیام دلخواه صادر می شود.
با این روش هر لایه طبق وظیفه تعریف شده اش عمل می کند ولی به نظر خیلی مسخره میاد که واسه اینکه messegeBox توی لایه Business نباشه یا چک کردن شروط توی لایهperesentation نباشه چند تا if اضافه تر بذاریم. اصلا این پارامتر پاس کردن های زیاد از این لایه به اون لایه باعث کندی برنامه و اتلاف منابع ما نمیشه؟
مشکل دوم هم که در این روش دارم اینه که هر کلاس فقط می تونه یک پارامتر پاس کنه و فقط یک شرط را چک کند مثلا ما برای ثبت یکسری اطلاعات n تا شرط رو باید چک کنیم . مثلا username تکراری نباشه pass کمتر از 3 تا نباشه id فرد موجود باشه و و و
حالا ما چه جوری می تونیم درست بودن همه این شروط رو با یک کلاس و یک return value نشان بدیم؟
نکته اول اینکه هر شرطی حتما نباید در لایه بیزینس چک شود
بسیاری از شرایطی که جزو اصول برنامه هستند و اکثر به ساختار بانک یا گزارشگیریها و محاسبات مربوط میشه در بیزینس انجام میشه و نه خالی بودن یک تکست باکس
درضمن بیشتر کار کنید تا این در ذهن شما قرار بگیره که میتونید تعداد زیادی پارامتر به یک تابع لایه بیزینس بدید و تمام شرایط اونجا چک شود و یک مقدار به شما برگرداند.
به هرحال روش سه لایه برای مدیریت بهتر (مخصوصا در خطا گیری) و جلوگیری از استفاده کدهای تکراری هست.
موفق باشید
دوست عزیز با این طرز فکرتان خیلی پیشرفت خواهید کرد. متاسفانه یک مثال ساده برایه معماری ۳ لایه نمیشه داد، چونکه مفاهیم زیادو مختلفی در این زمینه مهم هستند.
برایه مثال، چک کردن اینکه کاربر لگین کرده و بستگی به اینکه در چه گروهی چه اختیاراتی داره ، مایکروسافت در داتنت ۲.۰ استفاده از پروفایلها را توصیه میکنه.
معماریه ابجکتهایه بیزینسس لایر، داتا لایر و ... استفاده کردن از Application Blocks بهره میبرند،
http://msdn2.microsoft.com/en-us/library/ms998572.aspx
این لینک را یکی از استادان فرستاده بودند با عرض پوزش که پستشان را پیدا نکردم که بهش لینک بدم.
http://msdn2.microsoft.com/en-us/library/ms978471.aspx
اگر الان دارید با یک پروژه کار میکنید شاید تمام این مفاهیم برایه پروژه شما زیاد باشد. میتوانید همین روشهایی را که استفاده میکنید بهتر کنید و در کنارش هم روشهایی را که مایکراسفت تجویز میکند را مطالعه کنید.