Architektura generátoru kódu v PHP rubrika: Programování: PHP

6 arron
položil/-a 2.6.2014

Ahoj,

trochu (víc) jsem se zasekl na architektuře generátoru PHP kódu psaného přímo v PHP. Rád bych požádal zdejší komunitu o pomoc.

Snažím se generovat třídu, která má nějakou funkčnost na základě nějaké konfigurace. Konfigurace je primárně pole, ale teoreticky může být v nějakém jiném formátu. Třeba v Neonu. Jinými slovy, mělo by se dát velmi jednoduše rozšířit podobu předání konfigurace o další formát - třeba dopsáním dekorátoru...?

Dále bych rád, aby se vygenerovaná třida uložila někam do temp adresáře, negenerovala se stále dokola a příslušný soubor se nahrával přes require. Tato cache by se měla sama invalidovat, pokud se změní vstupní soubor (v případě, že data pocházejí ze souboru).

A naposledy, továrna na generovaný kód by měla vracet přímo instanci generované třídy.

Tedy použití by mělo vypadat asi takto:

$instanceOfGeneratedClass = $generator->create($arrayConf);
//nebo třeba
$instanceOfGeneratedClass = $generator->create($fileWithConfig);

Jak by měla správně vypadat architektura (class diagram) takového generátoru? Jak správně rozdělit odpovědnosti?

Díky všem za případnou radu, či třeba i odkaz na nějaký článek :-)

Komentáře

  • Filda : Já bych se inspiroval tím jak Nette Configurator vytváří DI kontejner. IMO to má stejný charakteristiky jaký požaduješ. Možná bych to rovnou obšlehnul a pak případně refaktoroval do požadovanýho tvaru. 2.6.2014
  • arron : Jo, to už mě taky napadlo :-D Jenom se mi to za boha nedaří našroubovat na to, co už mám napsané. No, tak možná to prostě smažu a začnu znovu :-D 2.6.2014
odkaz
Anonym
odpověděl/-a 2.6.2014

Nemám moc rád kód, který dokáže pracovat s naprosto libovolným vstupem. Stačí:

$arrayConf = $fileConfigReader->read($fileWithConfig);
$instanceOfGeneratedClass = $generator->create($arrayConf);

Komentáře

  • arron : Zatím to mám udělané tak, že mám jakýžsi ArrayBuilder, který přijímá array a pak NeonBuilder, který je dekorátorem a přidává podporu pro parsování neonu. Nicméně si nejsem jistý, jak moc to můžu prohlásit za čisté... 2.6.2014

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.