تعریف های مختلفی برای معماری نرم افزار قابل ارایه است با این وجود میتوان معماری نرم افزار را مجموعه ای از ساختارهای لازم برای استدلال در مورد یک سیستم دانست که شامل عناصر نرم افزاری، روابط بین آنها و ویژگی های هردو است. در ادامه این نوشته این تعریف را به تفصیل شرح خواهیم داد.
معماری نرم افزار مجموعه ای از ساختارهاست
نخستین و بدیهی ترین نکته تعریف ما ساختار است. ساختار مجموعه ای از المان هاست که از طریق رابطه هایی به هم مرتبط میشوند.هر سیستم نرم افزاری شامل ساختارهای مختلف معماری است که در طراحی، مستند سازی و تحلیل معماری نقش دارند. این ساختارها را میتوان به سه گروه تقسیم کرد.
ساختارهای ماژول
برخی از ساختارها سیستم نرم افزاری را به واحدهای پیاده سازی تقسیم میکنند که معمولا ما آنها را ماژول می نامیم. البته اینکه چگونه این تقسیم انجام می شود وابسته به نوع پروژه است. اگر از مدل شی گرا برای تحلیل استفاده شود خروجی میتوان از طریق کلاس دیاگرام حاصل شود. حتی میتوان مجموعه ای از ماژول ها را در لایه تجمیع کرد و ساختار ماژول جدیدی ایجاد کرد.معمولا در پروژه های بزرگ هر تیم روی یک ماژول کار میکنند. ساختار ماژول استاتیک است بر روی کارکرد سیستم متمرکز است. ساختارهای ماژولی امکان پاسخ به پرسش هایی همچون مسولیت عملکردی هر ماژول، مجوز استفاده از عناصر نرم افزاری دیگر و وابستگی های ساختار را فراهم می آورد. بررسی ساختارهای ماژولی سیستم روشی برای استدلال در مورد تغییر پذیری سیستم است. برخی از ساختارهای ماژول به شرح زیر هستند:
- ساختار تجزیه: واحدها از طریق رابطه -آیا ساب ماژولی از – هستند شکسته میشوند و این رابطه به صورت بازگشتی آنقدر تکرار می شود تا به کوچکترین ماژول قابل درک برسیم.
- ساختار استفاده: در این ساختار واحد میتواند ماژول یا کلاس باشد و واحدها از طریق رابطه – استفاده میکند- یا -وابسته است به – شکسته می شوند.
- ساختار لایهای: ماژول ها در این ساختار لایه نامیده میشوند و از طریق واسط با هم صحبت میکنند.
- ساختار کلاس: در این ساختار واحدها معمولا کلاس نامیده میشوند و از طریق رابطه -ارث میبرد از- و یا -نمونه ای است از- شکسته میشوند.
- دیتا مدل: این ساختار شامل اطلاعاتی استاتیک در مورد موجودیت و روابطشان است.
ساختارهای تعامل
گروه دیگر ساختاری های دینامیک و پویا هستند که بر روی شیوه تعامل مولفه ها به ويژه در زمان اجرا متمرکز هستند. معمولا این ساختارها را کامپوننت-کانکتور می نامند.این ساختارها به ما کمک میکنند تا مولفه های اصلی زمان اجرا و شیوه تعامل شان، منابع مشترک اصلی داده، بخش هایی که میتوانند به صورت موازی اجرا شوند و… را تببین کنند. از طریق این ساختارها میتوان کارایی و امنیت و همچنین دسترسی پذیری سیستم را شرح داد. برخی از ساختارهای تعامل به شرح زیر هستند
- ساختار سرویس: واحدها در این ساختار سرویس هستند و مولفه های با یکدیگر از طریق یک ارکستریشن سرویس مانند SOAP با هم صحبت میکنند.
- ساختار همزمانی: این ساختار فرصتهای همزمانی و موازی سازی درون یک معماری را مشخص میکند. واحد در این ساختار، ترد های منطقی است که دنباله ای از محاسباتی خواهد بود که میتوان به یک ترد فیزیکی اختصاص داد.
ساختارهای نگاشت و تخصیص
گروه سوم نگاشت بین ساختار نرم افزاری و محیط سازمانی و نصب و اجرای سیستم را بر عهده دارند.برخی از ساختارهای نگاشت به شرح زیر هستند:
- ساختار استقرار: چگونگی اختصاص سخت افزار به نرم افزار را تعیین میکند. روابط معمولا به صورت – تخصیص داده شده به – و در صورت دینامیک بودن – قابلیت مهاجرت به- تعریف میشود
- ساختار پیادهسازی: این ساختار معمولا چگونگی نگاشت مولفه های نرم افزای به فایل سیستم را مشخص میکند.
معماری نرم افزار انتزاعی است
از آنجایی که معماری شامل ساختار است و ساختارها نیز شامل عناصر و روابط هستند، معماری دربرگیرنده عناصر نرم افزاری و ارتباط بین آنهاست. این بدان معنی است که معماری از برخی اطلاعات عناصر که در استدل سیستم نقش ندارند چشم پوشی میکند. اغلب این عناصر از طریق واسط هایی باهم تعامل دارند که برخی ویژگی های خود را خصوصی و برخی را عمومی تعریف میکنند. معماری از ویژگی های خصوصی چشم پوشی میکند و بر روی ویژگی های عمومی متمرکز میشود. معمولا ما مفهمومی تحت عنوان معماری خوب یا بد را بررسی نمیکنیم، بلکه این موضوع را بررسی میکنیم که آیا یک معماری ويژگی های رفتاری و صفت های کیفی را به یک سیستم ارایه کرده یا از آن گرفته است.
ساختارها و دیدگاهها
هنگام بحث در مورد نمایش معماری، از دو واژه مرتبط ساختار و دیدگاه استفاده می شود. دیدگاه نمایشی از مجموعهی منسجم از عناصر معماری است که توسط ذینفعان نوشته یا خوانده می شود. دیدگاه شامل نمایش مجموعه ای از عناصر و روابط بین آنهاست. ساختار مجموعه ای از خود عناصر است که در نرم افزار یا سخت افزار موجود است. معمارها ساختارها را طراحی میکنند و دیدگاه های مربوط به آن ساختارها را مستند میکنند
الگوهای معماری نرم افزار
در برخی حالت ها عناصر معماری به گونه ای با هم ترکیب میشوند که مساله خاصی را حل کنند. این ترکیب ها به مرور در حوزه های مختلف به کار گرفته میشوند و مستند میگردند.این ترکیب عناصر معماری را الگوهای معماری مینامند. برخی از معروفترین الگوهای معماری به شرح زیر هستند.
- الگوی لایه ای: اگر از عناصر نرم افزاری از رابطه – استفاده میکند از – و به صورت یکطرفه به هم مرتبط شوند معمولا آن را لایه ای میخوانیم. هر لایه مجموعه ای از کارکردهای منسجم سیستم است که با سرویس به لایه بعدی خود خدمات میدهد. این الگو معمولا در گروه ساختاری های ماژول دسته بندی میشود.
- الگوی انباره یا ریپازیتوری: این الگو شامل کامپوننت ها و کانکتورهایی است که امکان ذخیره و بازیابی اطلاعات را معمولا از یک دیتابیس دارند.
- الگوی کلاینت – سرور: کامپوننت ها در این الگو کلاینت یا سرور هستند و کانکتور پروتکل ارتباطی بین آنهاست.
- الگوی multi-tier: چگونگی پخش و تخصیص کامپوننت ها را در مجموعه های سخت افزاری و نرم افزاری مشخص میکند و از طریق مدیوم های ارتباطی به هم متصل میشوند. این الگو برای دپلویمنت معمولا استفاده میشود.
معماری نرم افزار را مجموعه ای از ساختارهای لازم برای استدلال در مورد یک سیستم است که شامل عناصر نرم افزاری، روابط بین آنها و ویژگی های هردو است. در ادامه این نوشته این تعریف را به تفصیل شرح خواهیم داد.
هیمن دم شما گرم
با این تعاریف خوبی که ارائه کردی، یعنی 10 سال از اساتید دانشگاه های برتر کشور جلویی. موفق نشدم پروفایلتو ببینم که بیشتر با شما آشنا بشم. تعاریف بسیار کامل و قابل فهمی بود. در یک کلام دمت گرم.
ممنون از فیدبکتون. تو این پلی لیست کانال یوتیوب بیشتر در مورد الگوهای طراحی و معماری صحبت میکنم
کانال یوتیوب میکروفرانت اند