منظور از برنامه نویسی multi layer و multi tier چیست؟

۱  پاسخ

۳

اصطلاح Multi-Tier یا N-Tier یا به‌طور خاص‌تر Three-Tier در حالت کلی به معماری پیاده‌سازی اپلیکیشن اشاره داره. یعنی اینکه با هر زبان برنامه‌نویسی، این معماری رو رعایت می‌کنی. توی معماری چند‌لایه، لایه‌های مختلف یه نقش مشخص توی اپلیکیشن بازی می‌کنن، و اون نقش در حالت کلی وابستگی هم به لایه‌های دیگه نداره. تقریبا پراستفاده‌ترین این معماری هم معماری سه‌لایه‌ است. که شامل لایه‌های زیر می‌شه:



۱) لایه نمایش (Presentation Layer):

وظیفه این لایه، که از اسم‌ش هم معلومه، نمایش اطلاعات، آماده کردن فرم‌های لازم و … در حالت کلی مدیریت User Interface اپلیکیشن هست. یه بار ممکنه این UI وب‌بیسد باشه و ماهیت‌ش با HTML و سایر تکنولوژی‌های Client-Side وب درست شده باشه، یه موقع می‌تونه این اینترفیس، یه اپلیکیشن موبایل باشه، می‌تونه یه بار دیگه اپلیکیشن تحت سیستم عامل با همه المان‌های گرافیکی و چیدمان‌های یه اپلیکیشن باشه (مثلا ظاهر یه نرم‌افزار حسابداری).


کارهای این لایه اینه که اینترفیس رو برای کاربر آماده کنه (render یا generate یا …) اطلاعات رو از کاربر بگیره (مثلا تعداد سند حسابداری که قراره لیست بشه)، اون‌ها رو به لایه منطقی اپلیکیشن (Business Logic - مورد پایین) بفرسته، منتظر جواب (Response) از BL باقی بمونه، مجددا اطلاعات رو برای کاربر render یا generate یا … کنه و منتظر interaction بعدی کاربر بمونه.

۲) لایه منطقی اپلیکیشن (Business Logic Layer):

این لایه از اپلیکیشن هسته (core) اپلیکیشن محسوب می‌شه. تمام پردازش‌های کلی، جزیی، شرط‌ها، تصمیم‌های runtime با توجه به درخواست فعلی کاربر اینجا پیاده می‌شه. توی این بخشه که (برای همون نرم‌افزار حسابداری) تعداد سند از کاربر گرفته می‌شه و توی یه حلقه به اون تعداد اطلاعات از دیتابیس گرفته می‌شه و به فرمتی که لایه قبلی منتظرشه در میاد. به طور کلی، هر feature و functionality و الگوریتم که باید اپلیکیشن داشته باشه، توی این لایه‌س که پیاده‌سازی می‌شه.

۳) لایه دیتا (Data Layer):

این لایه تقریبا به دیتابیس به صورت فیزیکی اشاره داره، و اون بخشی از برنامه که دیتابیس رو Map می‌کنه به Domain Model اپلیکیشن. (ORM یا Object Relation Mapping)، به صورت مستقیم با دیتابیس کار می‌کنه (کوئری‌های مختلف رو می‌زنه و ResultSet رو تحویل می‌گیره)، دیتابیس رو توی محیط اپلیکیشن Persistence می‌کنه و … در کل وظایف زیاد‌تری از این هم می‌شه براش متصور بود، ولی خب همه‌شون وابستگی مستقیم و فیزیکی به دیتابیس دارن.



مزیت این معماری؟ تا اینجا احتمالا باید معلوم باشه، که با استفاده از این معماری پیاده‌سازی اپلیکیشن، وابستگی‌های هر لایه به لایه بعدی یا قبلی، به حداقل ممکنه (یا ایده‌آل‌ش اینه که صفر) می‌رسه. یعنی برای Business logic اپلیکیشن ما مطلقا هیچ تفاوتی نمی‌کنه «کی» با استفاده از «چه پلتفرم» یا «چه دیوایس‌» یا روی کدوم «پروتکل» داره درخواست ۱۰ تا سند حسابداری آخر رو می‌ده. BL صرفا می‌دونه که باید با «درخواست ۱۰ تا سند حسابداری آخر» چه‌جوری برخورد بکنه و چه‌جوری جواب پس بده. همین. برای PL هم هیچ تفاوتی نمی‌کنه که قسمت پروسس اپلیکیشن کجاست، روی چه سروری‌ه، با چی پیاده‌سازی شده و … صرفا درخواست می‌ده و می‌دونه جواب (response) رو چه‌جوری روی صفحه مرتب کنه که کاربر ببینه.


یه بحث، ارتباط BL و DL باقی موند. که با تعمیم توضیح بالا، مشخصه که کوئری زدن به صورت فیزیکی نباید داخل Business Logic اتفاق بیوفته. صرفا درخواست به Data Layer می‌رسه که «۱۰ تا سند حسابداری آخر رو به من بده». اینجاس که بحث Map شدن وارد کار می‌شه. سند حسابداری به کدوم table ربط داره؟ بر اساس چه فیلدی sort بشه که ۱۰ تای آخر تولید بشه؟ و … تمام این موارد رو با همون مفهوم ORM باید پیاده‌سازی کرد. اینجا هم برای اپلیکیشن ما هیچ توفیری نمی‌کنه که دیتابیس به صورت فیزیکی چیه. آیا Orcale یا MySQL؟ آیا Driver وصل شدن به دیتابیس وجود داره؟ آیا دسترسی لازم به کوئری زدن وجود داره؟ اینا اساسا به Business Logic ربط نداره و مشخصا از وظایف و توصیفات Data Layerه.



مثال؟ یکی از مهمترین و پرکاربردترین معماری‌های سه‌لایه هم MVC هست. یعنی Model و View و Controller. این معماری از نظر سنتی یه مقدار با توضیحات بالایی که دادم تفاوت داره. به این معنی که View و قسمت زیادی از Controller همون Presentation Layerه. قسمت کمی از Controller و Model رو می‌شه به Business Logic تعبیر کرد. و لایه‌ء Data Layer توی این معماری داخل Model گنجونده می‌شه، اسماً. و باید تفکیک ماهیت کاری حتما انجام بشه. به توضیح دیگه معماری MVC به صورت مثلثی عمل می‌کنه که View به Controller و بعد از اون Controller به Model و بعد از اون Model به View. ولی توی معماری سه‌لایه سنتی، این رفت و برگشت خطی‌ه.


در ادامه همین صحبت هم لایه‌های دیگه‌ای هم می‌تونی در نظر بگیری، مثلا لایه مجزای احراز هویت (Authentication Layer)، لایه مدیریت Report‌ها، لایه مدیریت تحلیل‌ها (Analytical Service Layer) و …

انصراف
انصراف