فریمورک (framework) چیست؟
در برنامهنویسی، فریمورک را میتوان مجموعهای از کدها ، کتابخانه ها و عناصر (component) آماده و قابل استفادهی مجدد (reusable) در نظر گرفت که به ما کمک میکنند یک اپلیکیشن را سریعتر و اصولیتر توسعه بدهیم. اما این ایده فقط مخصوص دنیای نرمافزار نیست.
مثلاً فرض کنید یک مهندس برق میخواهد یک دستگاه جدید بسازد. طبیعتاً قرار نیست تمام قطعات الکترونیکی را از صفر طراحی و تولید کند. خیلی از قطعات را میتواند از قبل آماده کند و با کنار هم قرار دادن آنها، دستگاه موردنظرش را بسازد.
فریم ورک هم تقریباً همین نقش را در دنیای نرمافزار دارد.به جای اینکه هر بار زیرساخت و component موردنیاز را از صفر پیادهسازی کنیم، فریم ورک بخش زیادی از این کارها را برای ما آماده کرده است؛ آن هم بر اساس یکسری استاندارد، قرارداد و پروتکل مشخص.حتی بعضی فریم ورک ها مشخص میکنند که ساختار برنامه چگونه باشد، اجزای مختلف چطور با هم ارتباط داشته باشند و دادهها چگونه مدیریت شوند.
پس در نهایت، فریم ورک به ما کمک میکند به جای اینکه زمانمان را صرف ساختن دوبارهی چیزهایی کنیم که قبلاً ساخته شدهاند، روی منطق اصلی و قابلیتهای خود اپلیکیشن تمرکز کنیم.
چرا از فریم ورک استفاده میکنیم؟
یکی از مهمترین دلایلی که از فریمورکها استفاده میکنیم، کاهش زمان و پیچیدگی توسعهی نرمافزار است. در یک پروژهی واقعی، بخش زیادی از کارهایی که انجام میدهیم، ارتباط مستقیمی با منطق اصلی کسبوکار ندارند؛ برای مثال مدیریت درخواستهای ورودی، ارتباط با پایگاه داده، مدیریت امنیت، اعتبارسنجی اطلاعات، مدیریت خطاها و بسیاری از وظایف دیگر.
فریم ورکها برای بسیاری از این نیازهای رایج، راهکارها و ساختارهای از پیش آمادهای در اختیار ما قرار میدهند. در نتیجه، توسعهدهنده لازم نیست برای هر پروژه تمام این بخشها را از ابتدا طراحی و پیادهسازی کند.
از طرف دیگر، استفاده از یک فریمورک میتواند باعث شود ساختار پروژه منظمتر و قابل پیشبینیتر باشد. وقتی اعضای یک تیم از یک فریم ورک و الگوهای مشخص آن استفاده میکنند، درک ساختار پروژه و توسعهی بخشهای مختلف آن برای سایر اعضای تیم نیز سادهتر میشود.
انواع فریم ورکها
فریم ورکها را میتوان بر اساس حوزهای که در آن استفاده میشوند به دستههای مختلفی تقسیم کرد. برای مثال، فریم ورکهایی برای توسعهی وب، توسعهی برنامههای موبایل، توسعهی برنامههای دسکتاپ، توسعهی بازی، پردازش داده و هوش مصنوعی وجود دارند. هر فریم ورک نیز معمولاً برای حل مجموعهای از مسائل مشخص در حوزهی خود طراحی شده است
برای مثال، در دنیای Java فریمورکهایی مانند Spring و در دنیای Python فریمورکهایی مانند Django و FastAPI برای توسعهی برنامهها و سرویسهای تحت وب مورد استفاده قرار میگیرند. در حوزهی توسعهی اپلیکیشنهای موبایل نیز فریمورکهایی مانند Flutter و React Native و در حوزهی توسعهی بازی فریمورکها و موتورهایی مانند Unity و Unreal Engine مورد استفاده قرار میگیرند.
تفاوت فریمورک و کتابخانه
در اینجا ممکن است یک سؤال مطرح شود: اگر فریمورک مجموعهای از کدهای آماده و قابل استفادهی مجدد است، پس چه تفاوتی با کتابخانه (library) دارد؟
یک کتابخانه معمولاً مجموعهای از قابلیتهای آماده را در اختیار اپلیکیشن قرار میدهد و این اپلیکیشن است که تصمیم میگیرد چه زمانی و چگونه از آن قابلیتها استفاده کند.
اما فریم ورک معمولاً علاوه بر فراهم کردن قابلیتهای آماده، ساختار و بخشی از جریان کلی اپلیکیشن را نیز کنترل و به دست میگیرد.به همین دلیل یکی از مفاهیم مهمی که در هنگام یادگیری فریمورک ها با آن مواجه میشویم، مفهوم Inversion of Control (IoC) یا «وارونگی کنترل» است که بخشی از کنترل و مدیریت اپلیکیشن به فریم ورک منتقل میشود.
بازخورد و دیدگاه ها
عالی =)