Registrování služeb v configu

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

Ahoj,

mám naprosto fundamentální dotaz.

Ve svém projektu používám NDBT a Ublaboo datagrid. Mám zhruba 15 databázových tabulek. V modelové vrstvě mám pro každou z nich vlastní třídu. K tomu nemalý počet datagridů, které mají svá rozhraní, stejně tak formuláře.

Problém je jednoduchý – mně nějak „pocitově“ přijde, že těch tříd mám zaregistrovaných moc (okolo 40), a že to dělám špatně. Nedá se nějakou mírnou abstrakcí, nebo lepším pochopením problému předejít tak velkému množství servisních tříd? Je to chyba návrhu, nebo běžná věc? Určitě by se potom projekt lépe spravoval.

PS: Můžu se nějak vyhnout vytváření šablony (tzn. samostatného .latte souboru) pro komponentu, jestliže v ní uvádím stejně jen {control komponenta}?

Děkuji za odpověď.

CZechBoY
Člen | 3608
+
0
-

Zalezi jak se ti ty datagridy meni a jestli by neslo udelat nejakou nadstavbu nad nim. Potom bys jen nastavil par property pres presenter a bylo by hotovo. Pokud chces danou konfiguraci pouzivat na vic mistech tak samozrejme udelej novou komponentu s konkretnim nastavenim jako do ted.

Sablonu bys mohl preskocit pres render metody

public function render()
{
    $this['komponenta']->render();
}
curl6
Člen | 29
+
0
-

@CZechBoY Nespatřuješ v tom (počtu) tedy až takový problém?

Pokusil jsem se v komponentě implementovat tebou zmíněný kód, ale vrací se mi chyba „Cannot send header after HTTP headers have been sent“.

greeny
Člen | 405
+
0
-

Větší aplikace klidně můžou mít zaregistrovaných stovky services. Obecně třeba pro každou entitu chceš form, repozitory, datagrid, často nějakou service…

CZechBoY
Člen | 3608
+
0
-

Na pocet bych ohled nebral, jen si v tom musis udelat organizacni porad jinak nic nenajdes.

MHm, muzes jeste zkusit latte sablonu ze stringu abys usetril aspon ten soubor.

Martk
Člen | 652
+
0
-

latte soubor se stejně jenom jednou zkompiluje, ale můžeš si udělat bázovou třídu na tyto komponenty:

abstract class BaseSingleComponentRenderer extends Control {

	abstract protected function getComponentToRender();

	final public function render() {
		$template = $this->getTemplate();

		$template->setFile(...);

		$template->ctrl = $this->getComponentToRender(); // osetreni instance Renderable

		$template->render();
	}

}

a v šabloně:

{control $ctrl}

Budeš mít jen jednu šablonu a nemusíš nic duplikovat.

Editoval Martk (24. 3. 2017 20:27)