در این نوشتار مطلقا از ارائه معادل برای برخی اصطلاحات خاص عمدا پرهیز کرده ام. قبلا در این مورد به صورت پراکنده بحث هایی با دوستان مطرح شده و اتفاقا یکی از محور های این بحث بر این واقعیت بنا شده که به نظر من بخش بزرگی از سوء تعبیر یا درک ناقص ، متوجه همین اشکال اساسی می باشد که تعجیل و پافشاری بی ثمر بر ارائه معادل های فارسی برای مفاهیمی که غالبا درک ناقصی از آنها صورت گرفته و ارائه و انتشار این معادل ها عملا موضوع را پیچیده تر نیز نموده است.
بعد از گذار از دنیای نرم افزارهای Database Centric و Client/Server و بویژه در زبان های مدرن برنامه نویسی به تدریج نیاز مبرمی ایجاد شد که در مورد مفاهیمی نظیر استراتژی، متدولوژی ، Principles ، Patterns و … بازنگری اساسی انجام شده و مخصوصا در دهه ۹۰ میلادی تعدادی از خبرگان این عرصه حتی با جمع آوری مطالعات و منابعی که از قبل وجود داشت ضمن هم سو کردن آنها با دستاوردهای نوین ، ایده هایی مدون و کارآمد را در قالب تئوری های متعدد ارائه کرده و بر لزوم بازنگری بر استراتژی و روش های پیاده سازی تاکید مجددی داشته باشند .
اگر به مجموعه همه تلاشهای انجام شده نگاهی داشته باشیم درخواهیم یافت که همه آنها بر این واقعیت انکار ناپذیر استوار شده است که با وجود سعی وافری که در این زمینه انجام شده اما بین مفاهیم زبانهای برنامه نویسی و زبان یا نیاز های موجود در Business Domain تفاوتهای فراوانی وجود دارد .
در واقع Business Domain مجموعه نیازها و مشکلات موجود در دنیای واقعی است که معمولا برای سهولت در حل آنها از Software Architect درخواست می شود تا در یک اقدام مشترک (ماهیت پروژه) برای حل آن در قالب یک استراتژی مشخص ، مشارکت نماید .
به عبارت ساده تر وظیفه اصلی یک Software Architect وظیفه شناس، ارائه مدلی منطبق با نیازها و مسائل و مشکلات موجوددر Business Domain می باشد و معیار موفقیت ، بی تردید انطباق هر چه بیشتر و در نتیجه ارائه راه حل Extensible و Reliable باقابلیت Test قبل از آزمایش در شرایط واقعی است .
این تنها بخشی از دلایلی است که بر لزوم استفاده از استراتژی و بهره گیری از Pattern ها و Principle ها تاکید کرده و آنها را به چیزی بیشتتر از یک انتخاب ،یعنی ضرورت تبدیل می کند .
من اعتقاد دارم که قبل از ادامه این بحث و معرفی مشهورترین تلاشهای انجام شده در این باره و آشنایی با شاخص ترین تئوریسین های این حیطه ، لازم است بررسی کنیم که خود Software Architecture بر اساس چه معیارهایی وارد نرم افزار شده است . در ظاهر آنچه مشخص است مقصود این بوده که تشابه فراوانی بین Civil Construction که در آن Design و Implementation از جایگاه فوق العاده ارشمندی برخوردار هستند، وجود داشته است .
در این باره Dino Esposito به دو نکته بسیار جالب اشاره می کند که به نظرم اشاره به آنها خالی از لطف نیست . به جسارت و شهامت او در این جمله دقت کنید :
In Software, The term Architecture precisely refers to building a system for a client. That’s it. No more and no less.
پس او اصطلاح معماری در نرم افزار را در خلاصه ترین شکل خود، صرفا در تعریف “ارائه یک سیستم به مشتری” خلاصه می کند . سپس به یکی از اساسی ترین تفاوتهای ماهوی بین معمار ی نرم افزار و هنر معماری اشاره می کند و ضرورت ها یا اساسا ماهیت نرم افزار را به طور مستمر نیازمند تغییر در Feature ها (حذف، اضافه، گسترش) و حتی تغییر در اولویت ها تلقی می کند .
ولی در نهایت او نیز تاکید می کند که قرض گرفتن مفهوم Architecture در نرم افزار صرفا اشاره به این واقعیت بوده که در نرم افزار نیز ضرورت Planning ، Designing و Implementation به همان قوت وجود دارد .
در نهایت این مقایسه نیازمند بررسی بیشتری می باشد و در این فرصت اندک مجال پرداختن بیشتر وجود ندارد .
آنچه در ادامه مورد نظر ما می باشد تاکید بیشتر بر تبیین دقیق تری از مفاهیم استراتژی ، متدولوژی ، Pattern و Principle و ارائه مطرح ترین نمونه های هر کدام از آنها می باشد . همچنین لازم است تاکید کنم که نویسنده این سطور هیچ ادعایی بر درک عمیق این مفاهیم و حتی دید واضحی بر مرزهای نامرئی بین هر کدام از آنها ندارد . در ادامه آنچه شاهد خواهیم بود فقط نقد، چکیده و گزارشی از یک بررسی بر مهم ترین دستاوردهای موجود بر این زمینه و تعمیم آنها در Microsoft .Net Platform و تکنولوژی های وابسته به آن خواهد بود .
… ادامه دارد …
پ.ن
تا قبل از Microsoft .NET Framework 3.5 تحلیل و ارائه چنین مباحثی در این Platform تقریبا غیر ممکن بود و معمولا نویسندگان ناگزیر از Java یا سایر زبانهای مدرن برای ارائه مثالهای ملموس تری در ارتباط با موضوع مباحث استفاده می کردند .
اما خوشبختانه این طلسم شکسته شده و امکان ارائه مثالها با استفاده از زبان بسیار مدرن و پیشرفته C# میسر شده است .
به قلم دوست بزرگوارم مهندس مهران