عامل ۲: وابستگی ها (Dependencies)
وابستگی ها را به صورت شفاف و صریح بیان کنید و آن ها را ایزوله کنید (Explicitly declare and isolate dependencies)
اکثر زبانهای برنامهنویسی دارای سیستم بستهبندی (packaging system) یا مدیریت بستهها (package manager) برای توزیع و پخش کتابخانهها هستند، مانند npm برای جاوا اسکریپت، pip برای پایتون و NuGet برای داتنت. کتابخانههایی که با ابزار مدیریت بستهها نصب میشوند میتوانند در سطح کل سیستم (system-wide) نصب شوند که با نام site packages نیز معروف هستند یا میتوانند فقط محدود به یک دایرکتوری شوند که برنامه در آن قرار دارد که با نام vendoring یا bundling نیز معروف هستند.
یک برنامه دوازده عاملی هیچ گاه اعتماد نمیکند که بستهها از قبل در سیستم نصب شدهاند و به صورت پیشفرض وجود دارند. این گونه برنامهها همه وابستگیها را به صورت کامل و دقیق و به کمک یک «بیانیه اعلان وابستگی» (dependency declaration manifest) اعلام میکنند. به علاوه از یک «ابزار ایزولهسازی وابستگی» (dependency isolation tool) در طول اجرای برنامه استفاده میکنند تا مطمئن شوند که هیچگونه وابستگی بیاننشدهای از محیط اطراف به داخل سیستم “نشت نمیکند” (leak in). وابستگیها به صورت کامل و صریح و به شکل یکسان هم برای محیط عملیاتی و هم برای محیط توسعه اعمال میشوند.
برای مثال در پایتون دو ابزار جداگانه برای این کارها وجود دارد. ابزار Pip برای اعلان وابستگیها و Virtualenv برای ایزولهسازی استفاده میشود. صرف نظر از ابزارهای استفادهشده، اعلان وابستگیها و ایزولهسازی وابستگیها باید همواره با هم استفاده گردند و هیچ یک از آنها به تنهایی شرطهای برنامههای ۱۲ عاملی را محقق نمیکنند.
یکی از مزایای اعلان صریح وابستگیها (explicit dependency declaration) این است که راه اندازی (setup) را برای توسعهدهندگان تازهوارد ساده میکند. توسعهدهنده جدید کافی است نسخهای ازکد (codebase) برنامه را روی دستگاه خود داشته باشد و آن وقت برای اجرا تنها به ابزارهای خود زبان (مانند پایتون) و ابزار مدیر وابستگی (مانند pip) نیاز خواهد داشت. پس از این مراحل، آنها میتوانند به کمک یک سری دستورات ساخت (build command) معین کارهای لازم برای اجرای برنامه را انجام دهند.
برنامههای دوازده عاملی نه تنها اعتماد نمیکنند که بستهها در سیستم از قبل نصب شدهاند، بلکه حتی اعتماد نمیکنند که ابزارها نیز از قبل نصب شده و قابل استفاده باشند. به عنوان مثال ابزاری مانند curl (ابزار ارسال و دریافت دادهها) ممکن است در اکثر سیستمها وجود داشته باشد، ولی تضمینی وجود ندارد که در همه سیستمهایی که برنامه روی آنها اجرا خواهد شد نیز وجود داشته باشد یا اینکه نسخه موجود در سیستم با برنامه سازگار باشد. اگر برنامهای به ابزاری نیاز دارد باید آن را به همراه خودش عرضه کند.
نوشتههای قبلی:
– قسمت دوم: پایگاه کد (۲)
مترجم: حمید آقای خاتمی
گزیده:
وقتی بچه بودم، پدرم میگفت که بزرگترین امیدها و بدترین ترسهای ما به ندرت رنگ واقعیت به خود میگیرند.
از فیلم مونیخ
دیدگاهتان را بنویسید