معماری نرم‌افزار

معماری نرم‌افزار براساس پروژه‌های متن‌باز

اینم یه تجربه پراکنده دیگه!

این روزها متاسفانه خیلی شلوغ بوده و من اونقدر درگیر بودم که نتونستم به تعهد شخصیم یعنی نوشتن دو متن در هفته و در بدترین حالت یک متن در هفته پایبند باشم. اما بالاخره امروز گفتم که بنویسم.

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

اما به نظر من برای اینکه بتونید از راه‌حل‌های متن‌باز به خوبی استفاده کنید باید یه سری ویژگی رفتاری در خودتون ایجاد کنید تا بتونید انتخاب کنید:

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

حالا یه نمونه موردی از کار خودم رو بهتون می‌گم:

صورت مساله پروژه اینه که رو UDP یه سری پکت دریافت کنه و بعد از محاسبات نتیجه رو برای یه سمت دیگه روی TCP ارسال کنه. مهم اینه که با حداقل delay و حداکثر کارایی این کار رو انجام بده. همچنین در پس زمینه اطلاعات رو روی DB هم ذخیره کنه. زبان برنامه نویسی در این حال c++ بود. حالا چیزای یکه من پیدا کردم ایناست:

  • یه راه حل خیلی خوب برای مدیریت سوکت سرور و همزمانی Boost هست که بسیار خوبه و خیلی عالی کانکشن ها و همزمانی و این چیزا رو مدیریت می‌کنه.
  • برای پایگاه داده از SOCI استفاده کردم
  • برای ThreadPool از یک ThreadPool متن باز که الان یادم نمی‌یاد آدرس گیت‌هابش رو دانلود کردم
  • برای مدیریت پارامترهای خط‌فرمان باز هم از Boost استفاده کردم

این باعث شد که من کمتر از نصف زمان لازم برای توسعه این نرم‌افزار زمان صرف کنم.

همین!