معماری ۳ لایه

معماری چند لایه
در مهندسی نرم افزار، سیستم‌های نرم افزاری را به دلیل کاهش پیچیدگی و ساده‌تر شدن آن‌ها و همچنین به خاطر تسهیل در امر نگهداری و اعمال تغییرات در آنها، به چند زیر سیستم تقسیم کرده و قسمت‌های مستقل سیستم را به صورت لایه‌های جداگانه و مستقل از هم طراحی می‌کنند. هر کدام از این لایه‌ها ضمن اینکه وظیفه خاص خود را دارند، با هم در ارتباط بوده به‌طوری‌که هر لایه به لایه‌های بالایی و پایینی خود سرویس داده و از آن‌ها سرویس می‌گیرد. انتقال اطلاعات و داده‌ها در بین این لایه‌ها از طریق Objectهایی که اصطلاحا DTO نامیده می‌شوند، انجام می‌گیرد و کاربر نهایی فقط با لایه بیرونی در ارتباط بوده و کاری با لایه‌های دیگر ندارد. به این روش طراحی سیستم‌های نرم افزاری، معماری چندلایه یا N-Tier گفته می‌شود.
معماری ۳ لایه یا 3-Tier
ارتباط لایه‌ها در معماری سه لایه طراحی سیستم‌های نرم افزاری
معماری ۳ لایه حالت خاصی از معماری چند لایه می‌باشد که سیستم‌ها بر اساس این معماری به ۳ لایه جداگانه تقسیم می‌شوند. این لایه‌ها عبارتنداز:
Presentation Layer (لایه نمایش): این لایه که به آن لایه Interface نیز گفته می‌شود شامل تمام عناصر قابل رویت مربوط به رابط گرافیکی کاربر می‌باشد و در واقع هر آنچه را که کاربر نهایی استفاده‌کننده از سیستم مشاهده می‌کند از قبیل فرم‌ها، کنترل‌های روی فرم‌ها، تصاویر، منوهای برنامه و… در این لایه قرار می‌گیرند. کاربر سیستم فقط با این لایه در ارتباط بوده و هیچ ارتباطی با دیگر لایه‌ها ندارد و در واقع درخواست خود را از طریق لایه نمایش به لایه‌های زیرین انتقال می‌دهد. وظیفه لایه نمایش این است که اطلاعات لازم را از کاربر گرفته و در صورت لزوم برخی Validation یا اعتبار سنجی‌هایی که باید در این لایه انجام گیرد مثل: کنترل طول فیلدها، کنترل اجباری بودن بعضی فیلدها و… را انجام می‌دهد و این اطلاعات را برای هر گونه پردازش لازم دیگری به لایه بعدی ارسال می‌نماید و در واقع هیچ اثری از منطق اصلی برنامه و اتصال به بانک اطلاعاتی در این لایه دید نمی‌شود.
Business Logic Layer (لایه منطق تجاری): این لایه که به آن لایه میانی (Middle Tier) نیز گفته می‌شود حاوی منطق اصلی برنامه بوده و وظیفه ارتباط بین لایه نمایش و لایه داده را بر عهده دارد. در واقع کلیه درخواست‌هایی که در اثر تعامل کاربر با لایه نمایش ایجاد شده‌است به این لایه منتقل شده و تمام پردازش‌های لازم بر اساس منطق اصلی برنامه در این لایه انجام شده و نتیجه این پردازش مجددا به لایه نمایش منتقل شده و برای کاربر به نمایش درمی آید. گاهی اوقات درخواست کاربر به گونه‌ای است که لایه منطق تجاری برای انجام آن نیاز دارد که با لایه داده یعنی لایه زیرین خود ارتباط داشته باشد مثلا کاربر ممکن است عملیات جستجو در محصولات یک شرکتی را بخواهد انجام دهد به این صورت که از طریق لایه نمایش لیست محصولات شرکت را درخواست می‌نماید، لایه نمایش درخواست کاربر را به لایه منطق تجاری ارسال می‌کند و این لایه نیز به دلیل اینکه انجام درخواست کاربر نیاز به برقراری ارتباط با لایه داده دارد، درخواست کاربر را به لایه داده ارسال می‌کند، لایه داده نیز درخواست کاربر را انجام داده و لیست محصولات شرکت را از بانک اطلاعاتی دریافت کرده و به لایه بالایی خود یعنی لایه منطق برنامه انتقاال داده و لایه منطق برنامه نیز این لیست را عینا با لایه بالایی خود یعنی لایه نمایش انتقال داده و در نهایت لایه نمایش این لیست را به کاربر نمایش می‌دهد. بنابراین وظیفه اصلی لایه منطق برنامه اعمال منطق اصلی برنامه بر روی درخواست کاربران و نیز برقراری ارتباط بین لایه نمایش و لایه داده می‌باشد.
Date Access Layer (لایه دسترسی به داده): این لایه که به آن لایه بانک اطلاعاتی نیز گفته می‌شود وظیفه مدیریت اطلاعات موجود در بانک اطلاعاتی یا همان Database را بر عهده دارد و بر اساس درخواست‌هایی که از لایه بالایی خود دریافت می‌کند عملیاتی از قبیل: حذف، اضافه، اصلاح، خواندن اطلاعات و… را بر روی بانک اطلاعاتی انجام داده و نتیجه عمل را به لایه بالایی خود ارسال می‌کند. باید توجه داشت که ارتباط با بانک اطلاعاتی فقط از طریق لایه داده انجام می‌گیرد.
مزایا و معایب معماری ۳ لایه
از مزایای معماری ۳ لایه یا چند لایه می‌توان به عدم وابستگی لایه‌ها به همدیگر اشاره نمود. مثلا لایه داده مستقل از لایه‌های دیگر عمل کرده و در صورت لزوم می‌توان با سرعت بالا و هزینه پایین این لایه را تغییر داد. به عنوان مثال در برنامه‌ای که از بانک اطلاعاتی SQL Server استفاده می‌شود به راحتی می‌توان بانک اطلاعاتی را به اوراکل (کمیک) یا هر بانک اطلاعاتی دیگر تغییر داد یا مثلا منطق اصلی برنامه را با کمترین هزینه می‌توان با تغییر لایه منطق تجاری تغییر داد. اما معماری ۳ لایه یا چند لایه همیشه راه حل مناسبی برای طراحی سیستم‌ها نیست به عبارت دیگر برای طراحی هر سیستمی به دلیل مقرون به صرفه نبودن نمی‌توان از این معماری استفاده کرد. مثلا برای سیستم‌های کوچک استفاده از معماری ۳ لایه زمان بر و هزینه بر می‌باشد و در واقع هزینه Develope و نگهداری سیستم بالا می‌رود.