Kdyby\Events a eventy nad třídami, co nejsou služba

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
thunderbuff
Člen | 164
+
0
-

Ahoj, v aplikaci mám více uživatelů a z určitých důvodů mají každý vlastní databázi. Proto musím třídy, které bych obyčejně registroval jako služby, vytvářet přes factory.

<?php

$user = $userRepository->find(1);
$articleService = $articleServiceFactory->create($user);

?>

V takto vytvořené třídě ArticleService se nevolají listenery, protože Kdyby\Events vyžaduje, aby byla ArticleService zaregistrovaná jako služba. Je možnost, jak eventy zprovoznit? A pokud ne, máte nějaký tip na změnu architektury, aby to bylo možné?

Azathoth
Člen | 495
+
0
-

Mohl bys trochu rozepsat to s tím, že má každý vlastní databázi? Nějak mi to nejde do hlavy.

thunderbuff
Člen | 164
+
0
-

Mám jednu globální databázi, která drží informace o uživatelích. A pak má každý uživatel svou databázi, která slouží pro ukládání jeho vlastních dat. Jelikož celkový objem dat se pomalu blíží k jednomu terabajtu, bylo by velmi obtížné držet data v jediné databázi. Důvodů pro oddělení je více, ale ten objem je hlavní.

Editoval thunderbuff (27. 8. 2015 15:34)

CZechBoY
Člen | 3608
+
+2
-

A proč nemůžeš ArticleService udělat jako službu a databázi brát až když bude potřeba?
Do konstruktoru dát nějaký DbResolver a tím potom získávat databázi.

Takhle to mám já a celkem to funguje :-)

David Matějka
Moderator | 6445
+
+1
-

Pokud bys tu factory nepsal rucne, ale pouzil generovanou tovarnu, tak se eventy napojeji.

Pokud je nutne napsat factory vlastni (jestli je slozitejsi), tak si bud proste injectni EventManager a dispatchuj je rucne, nebo si nastav vsehny on* (instance nejakyho Event nebo co..) stejne jako to dela kdyby/events (viz vygenerovany kontejner)