Rozšíření DI Containeru: Aspektově orientované programování – Kdyby/Aop

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip Procházka
Moderator | 4668
+
0
-

Znáte Aspektově orientované programování?
Pracuji na rozšíření, které ho přidává do Nettího DI Containeru

Prototyp už je funkční na Gitubu, samozřejmě včetně dokumentace a je možné ho klasicky nainstalovat pomocí composeru :)

Instalace

Tato knihovna je pouze pro vývojovou verzi Nette a je třeba závislosti v composeru speficikovat takto, kvůli minimální stabilitě balíčku:

"require": {
	"nette/nette": "@dev",
	"kdyby/annotations": "@dev",
	"kdyby/aop": "@dev"
}

Otázky směřujte sem

Další otázky prosím zakládejte jako samostatná témata na novém fóru help.kdyby.org. Díky!

redhead
Člen | 1313
+
0
-

Znám. Měl jsem rozpracovanou integraci Go!, ale byly tam nějaké problémy s autoloaderem (bilo se s RobotLoaderem) a nakonec jsem to dal k ledu, že se k tomu někdy vrátím.

K tvému rozšíření. Nevím jestli je chyba na mé straně, ale nejde mi to za boha rozjet.

První věc je, že když to nechám jet na @dev verzi nette, tak to spadne na

Declaration of Kdyby\Annotations\DI\AnnotationsExtension::afterCompile() should be compatible with Nette\DI\CompilerExtension::afterCompile(Nette\PhpGenerator\ClassType $class)

Ok, žádný problém, fixnul jsem, zaregistroval extensiony a vytvořil nějaký aspect s pointcutem methodAnnotatedWith okolo metody a pak to vyhodí:

[Semantical Error] The annotation "@Kdyby\Aop\Around" in method Aspect::method() does not exist, or could not be auto-loaded.

Z toho, co jsem dokázal oddebugovat, to vypadá, že se nenastaví loader pro anotace na fci class_exists. Tedy k té registraci se to ani nedostane, neboť weaving se dělá při beforeCompile a nastavení loaderu je při afterCompile (teda pokud jsem to správně pochopil). Tak jsem to registrování dal pro jistotu natvrdo do bootstrapu.

No a nakonec, když už to vypadalo, že to pojede, tak to padne na:

[] operator not supported for strings in ...\libs\nette\nette\Nette\common\ObjectMixin.php:90

když se to snaží vložit dokumentační anotaci @internal.

Felix
Nette Core | 1196
+
0
-

Aspektovy programovani je hodne zajimavy. Existuje nejaka jina cesta nez vytvaret vlastni tridy za behu?

Filip Procházka
Moderator | 4668
+
0
-

@redhead Ahoj, moc díky za reporty, mělo by to být opravené.

A ohledně Kdyby\Annotations\DI\AnnotationsExtension::afterCompile(), kvůli minimální stabilitě balíčku není možné vynutit instalaci @dev závislosti z druhé úrovně.

Zkus to takto mělo by to fungovat

"require": {
	"nette/nette": "@dev",
	"kdyby/annotations": "@dev",
	"kdyby/aop": "@dev"
}

Doplnil jsem to raději i do prvního postu :)

Filip Procházka
Moderator | 4668
+
0
-

@Felix: pár jich existuje, ale jediné (pro mě) schůdné je z nich pouze již zmiňované „Go!“, ale i to se mi úplně nelíbí, byť má některé features, které budu muset se svou architekturou oželet.

Jirda
Člen | 103
+
0
-

Huhu, vypada to hezky. Dobra prace!

petr.pavel
Člen | 535
+
0
-

Nechtěl byste si někdo udělat přednášku o AOP a Nette na nějaké Posobotě? Jel bych kvůli tomu i na kraj světa.

Mimochodem, proč je poslední Posobota na https://www.posobota.cz/ z roku 2012?

Filip Procházka
Moderator | 4668
+
0
-

@petr.pavel: budu to teď intenzivně používat a když se budu cítit že o to něco málo vím, tak bych si mohl na nějakou pražskou něco připravit :)

Šaman
Člen | 2659
+
0
-

Tak na to bych přišel taky :)
Celkově o aspektech nic moc nevím, ale co jsem si zjistil, to mě docela navnadilo. Jen teď nemám čas na nějaké pokusy. Přednášku a ukázku jak na to v Nette bych bral všema deseti.

enumag
Člen | 2118
+
0
-

+1 pro pražskou přednášku ;-)