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

این مطلب یکی از مقالات پرونده ویژه«متدولوژی‌ها، الگوها و معماری نرم‌افزار» شماره 207 ماهنامه شبکه است. علاقه‌مندان می‌توانند کل این پرونده ویژه را از روی سایت شبکه دانلود کنند.


الگوی معماری نرم‌افزار چیست؟

رویکردی که در اغلب آموزشگاه‌ها بر مبنای آن برنامه‌نویسی به افراد تازه‌کار یاد داده می‌شود، انطباق چندانی با اصول و قواعد علمی ندارد. شما در یک دوره آموزشی ثبت نام می‌کنید و مدرس در همان جلسه اول یا نهایت جلسه دوم شروع به آموزش دستورات برنامه‌نویسی کرده و به شما نحوه کار با کنترل‌ها در ASP.Net یا به‌کارگیری دستورات در PHP و... را یاد می‌دهد و چیزی شبیه یک سایت فروشگاهی در زمینه طراحی وب یا یک برنامه کاربردی ساده که قرار است به یک بانک اطلاعاتی متصل شده و مفاهیم پایه را به شما آموزش دهد، طراحی می‌کنید. پس از گذراندن ساعات تعیین‌شده به سطح متوسط و در نهایت پیشرفته می‌روید و تمام! اکنون این شما هستید که در نظر دارید با شرکت‌ها قرارداد بسته و پروژه‌های نرم‌افزاری را برای آن‌ها به سرانجام برسانید. این رویکرد در اغلب آموزشگاه‌ها دنبال می‌شود. اما متاسفانه در دنیای واقعی و در بعد جهانی نرم‌افزارها بر مبنای قاعده مشخصی ساخته می‌شوند. به عبارت دقیق‌تر، برای ساخت هر برنامه‌ای پس از آن‌که فازهای تحلیل، ارزیابی و درک نیازمندی‌ها به شکل درستی به اتمام رسیدند، الگوی معماری نرم‌افزار که پروژه بر مبنای آن باید ساخته شود، انتخاب می‌شود. نرم‌افزارهایی که بر پایه این قاعده ساخته شوند، اصولی و کاربردی بوده و با استقبال روبه‌رو خواهند شد. دانشجویان رشته کامپیوتر تا حدودی با مفهوم معماری نرم‌افزار و متدولوژی‌های نرم‌افزار آشنایی دارند. اما الگوی معماری نرم‌افزار چیست؟ الگوی معماری، یک راه‌حل جامع با قابلیت استفاده دوباره است که برای حل یکسری مسائل متداول در زمینه‌های خاص استفاده می‌شود. الگوهای معماری شبیه الگوهای طراحی نرم‌افزار هستند، با این تفاوت که حیطه گسترده‌تری را شامل می‌شوند. ما در این مقاله 10 مورد از الگوهای متداول معماری‌ را به شما معرفی خواهیم کرد. 

مطلب پیشنهادی

اسکرام چیست و چگونه آن را استفاده کنیم؟
نسخه‌ای شفابخش برای چابکی کسب‌وکارها

1- الگوی لایه‌ای (Layered pattern)

معماری لایه‌ای رویکردی سلسله مراتبی دارد. این الگو برای ساخت برنامه‌هایی استفاده می‌شود که در آن‌ها یک برنامه را می‌توان در گروه‌هایی از زیروظایف تقسیم‌ کرد که هر کدام از این وظایف در لایه‌ها و سطوح خاص انتزاعی قرار می‌گیرند. هر لایه خدماتی را برای لایه‌های بالاتر از خود ارائه می‌کند. در هر لایه وظایف خاصی انجام می‌شود و هر چه لایه‌ها به سمت بالاتر حرکت می‌کنند، این الگو به سمت کدهای زبان ماشین متمایل می‌شود.

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید

به‌طوری‌که در لایه خارجی مولفه‌هایی که در تعامل با رابط کاربری هستند در آن لایه قرار می‌گیرند. در لایه‌های داخلی مولفه‌ها با سیستم‌عامل و در برخی موارد کرنل سیستم‌عامل در ارتباط بوده و لایه‌های میانی نیز سرویس‌هایی را که نرم‌افزار تقاضا می‌کند، ارائه می‌کنند. در این الگوی معماری، هر لایه سرویسی برای لایه بالاتر از خود ارائه کرده و از لایه‌ای که پایین‌تر از خود قرار دارد، سرویسی دریافت می‌کند. البته لایه‌ها به لحاظ دسترسی‌پذیری با یکدیگر تفاوت‌هایی دارند. در برخی از سامانه‌ها یک لایه از نمای همه لایه‌ها به غیر از لایه خارجی که در نزدیکی آن قرار دارد، پنهان است. پروتکل TCP/IP که هر روزه از آن استفاده می‌کنید یا مدل مرجع OSI بر مبنای همین معماری نوشته‌شده است. الگوی معماری لایه‌ای برای یک سیستم اطلاعاتی عمومی از چهار بخش زیر تشکیل‌شده است:
1- لایه ارائه (Presentation layer) که به نام لایه UI معروف است.
2- لایه کاربردی (Application layer) که به نام لایه سرویس معروف است.
3- لایه منطق کسب‌وکار (Business logic layer) که به نام لایه دامنه معروف است.
4- لایه دسترسی به داده‌ها (Data access layer) که به نام لایه پایداری معروف است.

موارد به‌کارگیری معماری Layered pattern
این سبک از معماری برای ساخت برنامه‌های دسکتاپ عمومی و برنامه‌های وب که در حوزه تجارت الکترونیک به کار گرفته می‌شوند، استفاده می‌شود. همچنین برای طراحی سامانه‌های عامل یا سامانه‌های مدیریت بانک‌های اطلاعاتی نیز از این سبک معماری استفاده می‌شود. توجه داشته باشید از این سبک معماری برای طراحی همه سامانه‌های نرم‌افزاری نمی‌توان استفاده کرد، به دلیل این‌که در برخی موارد این امکان وجود ندارد تا یک نرم‌افزار را به‌سادگی به لایه‌هایی تقسیم کرد. 

2- الگوی کلاینت ـ سرور (Client-Server)

این الگوی معماری از دو بخش یک سرور و چند کلاینت تشکیل‌شده است. مولفه سرور سرویس‌هایی را برای چند مولفه کلاینت ارائه می‌کند. کلاینت‌ها به‌منظور دسترسی به سرویس موردنیاز خود، درخواستی برای سرور ارسال کرده، سرور درخواست را دریافت و پردازش کرده و در ادامه سرویس مدنظر کلاینت را ارائه می‌کند. علاوه بر پاسخ‌گویی به درخواست کلاینت‌ها، سرور به‌طور پیوسته آماده است تا درخواست‌ها را از کلاینت‌ها دریافت کرده و سرویس‌دهی کند.

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Client-Server
 از این الگو در ارتباط با برنامه‌های آنلاین همچون ایمیل‌ها و اشتراک‌گذاری اسناد استفاده می‌شود. 

3- الگوی ارباب ـ برده (Master- Slave)

این الگو از دو بخش master و slave تشکیل‌شده است. مولفه master وظایف را میان تعداد مشخصی از Slave‌های شناخته‌شده توزیع می‌کند. در ادامه هر یک از مؤلفه‌های Slave نتایجی را بازمی‌گرداند. مولفه master نتایج بازگردانده شده از مولفه‌های slave را جمع‌آوری کرده و نتیجه کلی را محاسبه می‌کند. 

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Master- Slave
از این الگوی معماری در ارتباط با بانک‌های اطلاعاتی replication که داده‌ها را از یک بانک‌اطلاعاتی در یک کامپیوتر یا سرور به بانک‌اطلاعاتی در سرور دیگری کپی می‌کنند، استفاده می‌شود. با توجه به این‌که مدل فوق بر مبنای یک بانک‌اطلاعاتی توزیع‌شده کار می‌کند، در نتیجه همه کاربران به اطلاعات یکسانی دسترسی داشته و در عمل به داده‌های مرتبط به انجام وظایف خود به‌گونه‌ای دسترسی خواهند داشت که هیچ‌گونه تداخلی در کار سایر کاربران به وجود نیاید. در این مدل بانک‌اطلاعاتی اصلی به‌عنوان منبع یا همان master در نظر گرفته‌شده و بانک‌های اطلاعاتی فرعی نیز با آن سینک از آن‌ها نام برده می‌شود. 

مطلب پیشنهادی

باید‌ها و نبایدها‌ی به‌کارگیری مدل V در ارتباط با توسعه نرم‌افزارها

4- الگوی Pipe-filter

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

پرکاربردترین الگوهای دنیای نرم‌افزار
موارد به‌کارگیری  معماری Pipe-filter
از این الگو می‌توان برای کامپایلرها که در آن‌ها یکسری مولفه فیلتر به شکل متوالی برای تحلیل‌ کدهای اصلی، تحلیل واژگان، تحلیل معنایی و تولید کدها به کار گرفته می‌شود، استفاده کرد. همچنین در ارتباط با ساخت گردش‌کار در بیوانفورماتیک نیز از این الگوی معماری استفاده می‌شود. 

5- الگوی کارگزار- Broker

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

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Broker
از این الگوی معماری در ارتباط با طراحی برنامه‌های ارتباطی همچون Apache ActiveMQ، Apache Kafka، RabbitMQ و JBoss Messaging استفاده می‌شود. 

مطلب پیشنهادی

این 11 فناوری آینده شغلی برنامه‌نویسان را تضمین می‌کند
سرمایه‌گذاری زمانی روی فناوری‌های آینده

6- الگوی نظیربه‌نظیر (Peer to Peer)

در این الگوی معماری، هر یک از مولفه‌ها به‌عنوان یک نظیر/همتا (Peer) در نظر گرفته‌شده و هر یک از آن‌ها ممکن است در قالب یک کلاینت رفتار کرده و سرویسی را از سایر همتایان درخواست کند. درعین‌حال یک همتا ممکن است نقش یک سرور را بازی کرده و به همتایان خود سرویسی را ارائه کند. در نتیجه یک مولفه همتا در یک‌زمان ممکن است نقش کلاینت را بازی کرده و در زمان دیگری نقش یک سرور یا به‌طور هم‌زمان هر دو نقش را ایفا کند. به یک مسئله مهم دقت کنید برای یک همتا این امکان وجود دارد تا به شکل پویا و در مدت‌زمانی که ایفاگر یک نقش است، تغییر وضعیت دهد. 

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Peer to Peer
از این الگوی معماری می‌توان در ارتباط با پیاده‌سازی شبکه‌های به‌اشتراک‌گذار فایل‌ها همچون Gnutella و G2 و پروتکل‌های چندرسانه‌ای همچون P2PTV و PDTP استفاده کرد. 

7- الگوی معماری Event-Bus

این الگوی معماری بر مبنای رخدادها بوده و از چهار مولفه اصلی منبع رویداد (Event Source)، شنوندگان رویداد (Event Listener)، کانال (Channel) و event bus تشکیل‌شده است. مولفه منبع پیام‌ها را برای یکسری کانال‌های خاص از طریق event bus منتشر می‌کند. در این بین شنوندگان ممکن است به شکل مشترک در حال گوش کردن به کانال یکسانی باشند که پیش از آن به عضویت آن درآمده‌اند. در نتیجه از پیام‌هایی که روی یک کانال خاص منتشر می‌شود اطلاع پیدا خواهند کرد. اگر معماری Event-Bus را با پیاده‌سازی‌های دیگری همچون Pub & Sub مقایسه کنیم باید بگوییم معماری فوق از آن جهت به وجود آمده تا جایگزین سامانه‌های توزیع رویدادمحوری شود که در آن‌ها مولفه‌ها برای آن‌که بتوانند خود را به یکدیگر معرفی کنند، ابتدا باید ثبت شوند. این معماری خاص منظوره است، به دلیل این‌که پیچیدگی‌ها و سرباره‌های زمان اجرای اضافی را به یک سیستم اضافه می‌کند. در نتیجه نباید جایگزین راهکارهای متداول فراخوانی متدها شود. همچنین نباید به‌عنوان جایگزینی برای ارتباطات درون فرآیندی (inter-process) و برخی از سامانه‌های Pub&Sub به کار گرفته شود. 

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Event-Bus
این الگوی معماری برای طراحی و توسعه برنامه‌های اندرویدی و سرویس‌هایی که به‌منظور ارسال اعلان‌ها به کار گرفته می‌شود کاربرد دارد.

8- الگوی معماری Model-View-Controller

این الگو که اغلب موارد با واژه MVC از آن نام‌برده می‌شود، یک برنامه تعاملی را به سه بخش زیر تقسیم می‌کند.
1.model: که شامل قابلیت‌های اصلی برنامه و داده‌ها است. 
2. View: وظیفه این بخش نشان دادن اطلاعات به کاربر است. در برخی از برنامه‌ها ویو نقشی بیش از نشان دادن اطلاعات بر عهده دارد.
3. controller: این بخش مدیریت داده‌های ورودی را که از سوی کاربران وارد می‌شود، برعهده دارد. همچنین وظیفه برقراری ارتباط میان model و view نیز بر عهده مولفه کنترلر است. 
این الگوی معماری به‌منظور تفکیک کردن مولفه‌هایی که به آن‌ها اشاره شد، استفاده می‌شود. به عبارت دقیق‌تر، اگر برای طراحی یک برنامه از چنین الگویی استفاده کنید، فرآیند به‌کارگیری داده‌ها درون برنامه کاربردی و فرآیند نشان دادن اطلاعات و دریافت داده‌ها از کاربران از یکدیگر تفکیک می‌شود. همین موضوع باعث می‌شود تا پیچیدگی طراحی به میزان قابل‌توجهی کاهش پیداکرده و فرآیند توسعه نرم‌افزار به‌راحتی انجام شود. همچنین قابلیت استفاده دوباره سورس‌کدها را به میزان قابل‌توجهی افزایش می‌دهد. 

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Model-View-Controller
 این الگوی معماری برای ساخت برنامه‌های وب که در زمان ساخت آن‌ها از زبان‌های برنامه‌نویسی بزرگی استفاده می‌شود و تعامل با چارچوب‌های وب همچون Django و Rails کاربرد دارد. 

9- الگوی تخته‌سیاه (Blackboard)

این الگو برای حل مشکلاتی استفاده می‌شود که هیچ‌گونه استراتژی مستقیمی برای حل آن‌ها وجود ندارد. از این الگوی معماری عمدتا در ارتباط با ادغام‌سازی بخش‌های تخصصی و متنوعی استفاده می‌شود که نمی‌توان یک راهکار قطعی برای ادغام و توسعه آن‌ها پیدا کرد. الگوی blackboard از سه مولفه اصلی زیر تشکیل‌شده است:
Blackboard: یک حافظه سراسری ساخت‌یافته که شامل اشیای مدنظر است. 
Knowledge Source: شامل ماژول‌های تخصصی است که برای پردازش داده‌ها استفاده می‌شوند. 
Control component: ماژول‌های موجود در مدل را انتخاب، پیکربندی و اجرا می‌کند. همه مولفه‌ها به تخته‌سیاه دسترسی دارند. مولفه‌ها ممکن است خود اشیای داده‌ای جدیدی را تولید کرده و به تخته‌سیاه اضافه کنند. مولفه‌ها، تخته‌سیاه را به‌منظور پیدا کردن داده‌های خاصی جست‌وجو می‌کنند. برای این منظور مولفه‌ها از طریق مکانیزم تطبیق الگو در knowledge Source داده‌های موردنیاز خود را پیدا می‌کنند. 

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید

موارد به‌کارگیری معماری Blackboard
 این الگو برای ساخت سامانه‌های تشخیص گفتار، شناسایی خودرو و ردیابی آن، شناسایی ساختار پروتئین‌ها و تجزیه‌وتحلیل سیگنال اشیایی که در زیر آب قرار دارند، کاربرد دارد.

10- الگوی مفسر (Interpreter)

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

با 10 الگوی پراستفاده و مهم معماری نرم‌افزار آشنا شوید
موارد به‌کارگیری معماری Interpreter
از الگوی معماری فوق می‌توان در ارتباط با زبان‌هایی که در تعامل با بانک‌های اطلاعاتی SQL قرار دارند و زبان‌هایی که برای توصیف پروتکل‌های ارتباطی استفاده می‌شوند، بهره برد.

 

برچسب: