locknet.ro

archive

Medick Environments - Part 1

Unde suntem?

In medick, fisierul central de configuratie ar trebui sa fie conf/NUMELE_APLICATIEI.xml.
Din pacate lucrurile nu stau tocmai asa, iar in cazul in care se doreste mutarea unei aplicatii de pe un server pe altul (de exemplu localhost – testing server – pe domeniul-meu.info – production system) situatia poate fi cu adevarat dureroasa pentru ca vei avea de modificat 3 fisiere:

Ce o sa se schimbe prin introducerea “environments”?

Migrarea se va face mult mai usor, doar public/index.php va trebui modificat.
Normal, in conf/NUMELE_APLICATIEI.xml va trebui sa definim mai multe medii de lucru (environments):

<?xml version="1.0" encoding="latin1"?>
<application name="${app.name}">
  <environment name="localhost">
  [.....]
  </environment>
  <environment name="test">
  [.....]
  </environment>
  <environment name="live">
  [.....]
  </environment>
</application>

In cazul in care mutam aplicatia pe un alt sistem, in public/index.php se va schimba in include_once locatia catre fisierul boot.php iar Dispatcher-ul trebuie sa cunoasca locatia catre fisierul de configurare si mediul dorit:

// complete path to medick boot.php file.
include_once('${medick.core}${ds}boot.php');
// complete path to ${app.name}.xml 
// & environment to load
$d= new Dispatcher(
         ContextManager::load(
             ${app.path}${ds}conf${ds}${app.name}.xml',
             'localhost'));
$d->dispatch();

Beneficii.

Mutarea unei aplicatii intre diferite configuratii va fi floare la ureche.
Alte beneficii vor fi vizibile in curand. Si ma gandesc aici la momentul in care medick va genera si unit-teste pentru controllere/modele.

Dezavantaje.

Un fisier mai mare de parsat cu simplexml_load_file.
O solutie ar fi ca dupa o parsare initiala sa pastram - intr-un viitor cache - o clasa generata ale carei metode sa returneze plain PHP arrays.

Cand?

Conceptul de environments va fi introdus in versiunea 0.2.1.