هر چقدر منتظر ماندم تا عزيزان راجع به مبجث معماری نظری بدهند تا به بهانه آن، مباحث را از سر بگيرم، نظری نيامد که نيامد. انگار دوستان علاقهای به اين بحث ندارند يا شايد ....

به هر حال سعی میکنم اين نوشتهها را تا تکميل شدن ادامه دهم. برگرديم به بحث اصلی.
برای اين که معماری نرمافزار را بتوان مورد استفاده قرار دهيم و با آن اخت بگيريم، نیاز داریم تا تکليف چند موضوع را روشن کنيم:
1- تعريف معماری نرمافزار چيست؟
2- چرا به معماری نرمافزار نياز داريم؟
3- معماری نرمافزار تحت تأثير چه چيزهايی است؟
4- معماری نرمافزار روی چه چيزهايی تأثيرگذار است؟
5- چگونه به يک معماری نرمافزار خوب (مطلوب) دست پيدا کنيم؟
5- معماری نرمافزار را چگونه نمایش دهيم؟
6- کدام فرآيند توليد نرمافزار، مفهوم معماری نرمافزار را در خود به وضوح بيان کرده و ما را مجبور به انجام آن میکند؟
بخش اول: تعريف معماری نرمافزار
واقعيت اين است که تعاريف متفاوتی در کتابها و منابع مختلف از معماری نرمافزار ارائه شده است. اين مفهوم در انستيتو مهندسی نرمافزار دانشگاه کارنگیملون به بلوغ رسيد و پس از آن توسط ديگران بسط داده شد.
وقتی صحبت از معماری نرمافزار میشود، اولين چيزی که میشنويد، مبحث لايهبندی(Layering) است. تا چند سال پيش، کلمه معماری معادل سيستمهای دو لايه و سه لايه بود و امروز سيستمهای سه لايه و گاه پنج لايه و گاه چهار به علاوه يک لايه و گاه برای همخوانی با ضرب المثل معروف، به هفت لايه نيز منجر میشود.(آفتابه، لگن هفت دست. ...)
اما آيا واقعاً معماری جز لايهبندی، چيز ديگری نيست؟
در جواب اين سوال، دوستان موارد ديگری را نيز مطرح میکنند و آن مسائلی مثل مانايی(Persistance)، تراکنشها (Transaction) و از اين قبيل است.
خوب سوال ديگری که مطرح میشود آن است که اگر مسائل مطرح شده بالا شامل مانايی، تراکنش و از اين دست را برای يک سيستم حل کنيم، آيا برای سيستم ديگر، بحث معماری نخواهم داشت؟ آيا میتوانم ادعا کنم که معماری نرمافزار را يک بار برای هميشه حل کردهام؟
لطفاً جوابهايتان را برايم ارسال کنيد. (آزموده را آزمودن خطاست
)
برگرديم به بحث خودمان، تعريف معماری نرمافزار چيست؟ در اينجا از مراجع موجود استفاده کرده و تعاريفی ارائه میدهيم.
"معماری نرمافزار برنامه يا سيستم کامپيوتری، در برگيرنده ساختار سيستم است که شامل مولفهها، خصوصيات قابل رويت مولفهها و روابط بين آنها میباشد"[سايت SEI(انستيتو مهندسی نرمافزار)].
همچنين "معماری نرمافزار شامل:
- تصميمگيریهايی در مورد سازمان سيستم نرمافزار
- انتخاب عناصر ساختاری و واسطهای آنها به نحوی که سيستم از ترکيب رفتار اين عناصر شکل گرفته باشد.
- سازماندهی عناصر ساختاری و رفتاری در قالب زيرسيستمها
- سبکهای معماری مورد استفاده
علاوه بر ساختار و رفتار سيستم، معماری نرمافزار شامل سبک و سنگين کردن و پوشش دادن مواردی از قبيل سهولت کاربری، کارکردی، کارايی، انعطاف، استفاده مجدد، سهولت درک و فهم، محدوديتهای اقتصادی و تکنولوژيکی نيز میگردد." [RUP]
در اين مورد بيشتر توضيح خواهم داد.