JSifalda's blog

The simple way




Nette moduly konečně použitelně

//EDIT

Článek neodpovídá skutečnostem. Nette moduly jsou stále ve vývoji. Pokračování již brzy.

//EDIT2

Momentálně řeším kde moduly uchovávat

//EDIT3

Aktuální řešení Nette moduly (a vlastní instalátor)


Dnes jsem do svého frameworku Flame přidal několik jednoduchých přesto dost podstatných commits, které vylepšují funkcionalitu základních Nette modulů.

Vize byla jasná - už mě nebavilo stále psát základní části aplikace, jako např. users management pro několik projektů zvlášť. Proto jsem chtěl vytvořit jednoduchý modules management, který mi práci usnadní.

Jak to funguje?

Metoda registerModulesExtension zaregistruje extension modules.

modules:
  userModule: [%appDir%/UserModule/config/config.neon]
  settingModule: \Flame\Blog\SettingModule\SettingModule([%appDir%/SettingModule/config/config.neon])
  postModule: \Flame\Blog\PostModule\PostModule

Rozšíření modules nabízí volnost syntaxe. Povinný je pouze název modulu.

Každý modul je vlastní extension, což nabízí širokou možnost rozšíření (např. zaregistrovat makra a helpery), který musí být potomek třídy ModuleExtension

Celý tento proces mi dovoluje jednoduše vytvořit aplikaci s následující strukturou:

app
    - AppModule
    --- Application
    --- Backmodule
    --- FrontModule
    --- config
    --- Router
    - PostModule
    --- BackModule
    --- FrontModule
    --- Entity
    --- Latte
    --- Model
    --- components
    --- config
    - SettingModule
    - UserModule

Konkrétní ukázka na github.com/flame-org/Blog

AppModule je základní modul, který by měla obsahovat každá takhle navržená app, kterou není třeba registrovat do modules extension. Viz bootstrap.php.

Každý modul definuje vlastní smysl v aplikaci, proto není nic jednoduššího než vzít složku UserModule a překopírovat do jiné skvělé aplikace :-)

Výhody

  1. Logická struktura - Rozdělení do "addonů", které združují jen svoji vlastní funkcionalitu.
  2. Snadná rozšiřitelnost - Každý modul definuje vlastní extension pro compiler.
  3. Snadné znovupoužití jednotlivých modulů na jiných projektech.
  4. Jednoduchá registrace modulů přes config.neon.

Omezení

  1. Závislosti nelze odklonit úplně. Každý presenter ať už pro back nebo frontend musí dědit od základního presenteru, který se nachází v AppModule a bude vytvářet např. komponenty.
  2. Takto definované moduly nedodržují PSR0, doufejme že řešení je na cestě. Viz #909

Plán do budoucna je jasný - nebude dlouho trvat a přestane mě bavit pořád kopírovat jednotlivé moduly, proto chci vytvořit vlastní composer instalátor po vzoru např. juzna/nette-addon-installer, abych se zbavil copy & paste syndromu a vyřešil tak i zároveň dependencis jednotlivých modulů.


Na takto postaveném systému beží i tento bog.

Rád bych také název modules nahradil za addons, aby se to nepletlo s Nette moduly, ačkoliv z nich vlastně vycházejí.

Řešení není konečné a je ještě hodně na čem pracovat, ale myslím, že je to první krůček evoluce. :-)

Přivítám jakékoliv připomínky, názory, či rady v komentářích.

20.02.2013 at 21:49:41