Kihagyás

2. Függőségek

Függőségek nyilvánvalóan deklarálása és elszigetelése

A legtöbb programozási nyelv kínál egy csomagolási rendszert a támogató könyvtárak terjesztéséhez, például a CPAN a Perlhez vagy a Rubygems a Rubyhoz. A csomagolási rendszeren keresztül telepített könyvtárakat rendszerszinten telepíthetik (ezt nevezik "site packages"-nek) vagy a program könyvtárába zárhatják ("vendoring" vagy "bundling").

A Twelve-Factor alkalmazás soha nem támaszkodik a rendszer-szinten telepített könyvtárak implicit létezésére. Az összes függőséget nyilvánvalóan és teljes mértékben deklarálja egy függőségdeklarációs nyilatkozatban. Továbbá, végrehajtás közben függőség-izolációs eszközt használ annak biztosítására, hogy nincsenek "belekúszó" implicit függőségek a környező rendszerből. A teljes és kifejezett függőségmeghatározás egységesen alkalmazandó mind a termelési, mind a fejlesztési környezetre.

Például a Ruby esetében a Bundler a Gemfile nyilatkozatformátumot kínálja a függőségdeklarációhoz, és a bundle exec-et a függőség-izolációhoz. Pythonban két különálló eszköz van ezekre a lépésekre - a Pip a deklarációhoz, a Virtualenv pedig az izolációhoz használatos. Még a C nyelvben is van az Autoconf a függőségdeklarációhoz, és a statikus linkelés biztosíthat függőség-izolációt. Bármilyen eszközlánc esetén a függőségdeklaráció és izoláció mindig együtt kell használni - csak az egyik vagy a másik nem elegendő a Twelve-Factor követelmények teljesítéséhez.

Az egyik előnye az explicit függőségdeklarációnak az, hogy megkönnyíti az új fejlesztők számára az alkalmazás beállítását. Az új fejlesztők letölthetik az alkalmazás kódbázisát a saját fejlesztői gépükre, csak a nyelvi futtatókörnyezetet és a függőségkezelőt kell telepíteniük előfeltételként. Ezáltal képesek lesznek mindent beállítani, amire szükség van az alkalmazás kódjának futtatásához egy meghatározott építési parancs segítségével. Például, a Ruby/Bundler esetén az építési parancs a bundle install, míg a Clojure/Leiningen esetén a lein deps.

A Twelve-Factor alkalmazások sem támaszkodnak a rendszereszközök implicit létezésére. Ide tartozik például az ImageMagick vagy a curl használata. Habár ezek az eszközök sok vagy akár legtöbb rendszeren elérhetőek lehetnek, nincs garancia arra, hogy minden olyan rendszeren, ahol az alkalmazás a jövőben futni fog, megtalálhatóak lesznek, vagy hogy a jövőbeli rendszeren található verzió kompatibilis lesz az alkalmazással. Ha az alkalmazásnak szüksége van a rendszereszköz használatára, akkor azt be kell zárni az alkalmazásba.