فاکتور اول: Codebase
اولین اصل در متدولوژی 12-Factor App مربوط به کدبیس (Codebase) است. هر اپلیکیشن باید یک کدبیس واحد داشته باشد که تحت سیستم کنترل نسخه (Version Control) مدیریت میشود. سیستمهای رایج شامل Git، Mercurial و Subversion هستند.
کدبیس به یک مخزن کد (Repository یا Repo) گفته میشود. این مخزن شامل تمام تاریخچه تغییرات کد است و میتواند در سیستمهای متمرکز مانند Subversion یا سیستمهای توزیعشده مانند Git وجود داشته باشد.
یک کدبیس، چند استقرار
هر اپلیکیشن تنها یک کدبیس دارد، اما میتواند در چندین محیط و نسخه اجرا شود که به آنها Deploy گفته میشود. این محیطها شامل سایت production، محیطهای staging و نسخههای محلی توسعهدهندگان است. هرکدام از این محیطها یک deploy مجزا محسوب میشوند.

- همیشه یک رابطه یکبهیک بین کدبیس و اپلیکیشن وجود دارد.
- اگر چندین کدبیس وجود داشته باشد، آن سیستم یک اپلیکیشن مستقل نیست، بلکه یک سیستم توزیعشده است که هر جزء آن میتواند یک اپلیکیشن مستقل و مطابق با 12-Factor باشد.
- به اشتراک گذاشتن یک کدبیس بین چند اپلیکیشن نقض اصول 12-Factor است. در این حالت، کد مشترک باید به صورت کتابخانه درآمده و از طریق مدیریت وابستگیها استفاده شود.
هر deploy ممکن است نسخه متفاوتی از کد را اجرا کند. برای مثال، توسعهدهنده ممکن است تغییراتی را در نسخه محلی خود داشته باشد که هنوز به staging نرسیده باشد و staging ممکن است تغییراتی داشته باشد که هنوز در production اعمال نشده است. با این حال، همه deployها متعلق به یک کدبیس هستند و بنابراین به عنوان نسخههای مختلف یک اپلیکیشن شناخته میشوند.
- یک کدبیس واحد برای اپلیکیشن وجود دارد که شامل تمام کدهای فروشگاه، مانند مدیریت کاربران، محصولات و سفارشهاست.
- این اپلیکیشن در چندین محیط اجرا میشود: نسخه محلی توسعهدهنده، محیط staging برای تست ویژگیهای جدید، و محیط production که کاربران واقعی از آن استفاده میکنند.
- هر محیط ممکن است نسخه متفاوتی از کد را اجرا کند؛ مثلا توسعهدهنده تغییراتی را آزمایش میکند که هنوز به staging نرسیده، و staging ممکن است ویژگیهایی داشته باشد که هنوز به production منتقل نشده است.
مقایسه عملکرد
مزیت داشتن یک کدبیس واحد این است که تغییرات کد و اشکالزدایی سادهتر میشود. تمام نسخهها از یک مبدا اصلی میآیند و این باعث میشود مدیریت نسخهها و هماهنگی بین تیمها راحتتر باشد.
| ویژگی | یک کدبیس واحد | چند کدبیس |
|---|---|---|
| مدیریت نسخه | ساده و شفاف | پیچیده و پراکنده |
| هماهنگی تیم | راحت، همه روی یک کد کار میکنند | سخت، بخشها مستقل و ناسازگار |
| استقرار و تست | قابل پیشبینی، deployهای مختلف قابل شناسایی | نامشخص، نیاز به هماهنگی زیاد |
| بازگشت به نسخههای قبلی | آسان با سیستم کنترل نسخه | مشکل و زمانبر |
بنابراین، رعایت اصل Codebase در 12-Factor App باعث میشود اپلیکیشن شما ساختارمند، قابل پیشبینی و آماده رشد و مقیاسپذیری باشد، بدون اینکه پیچیدگیهای مدیریتی و خطای انسانی افزایش پیدا کند.