Je prasárna injektovat model do modelu přes DI?

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

Ahoj, uvažuju nad tím, který z těchto přístupů je čistší, osobně si myslím, že ten první. Jaký je na to názor ostatních?

1. varianta
config.neon

common:
  services:
    profile:
      class: Models\Profile

    category:
      class: Models\Category(@profile)

Model Category

protected $profile;

public function __construct(Profile $profile)
{
  $this->profile = $profile;
}

2. varianta
config.neon

common:
  services:
    profile:
      class: Models\Profile

    category:
      class: Models\Category

Model Category

/**
 * @var Models\Profile
 * @inject
 */
public $profile;
Felix
Nette Core | 1190
+
0
-

Ja zatim pouzivam autowiring + constructor injection. Takze nepisu Models\Category(@profile), ale Models\Category.

Nicmene, na co potrebujes model v modelu? Nebylo by lepsi pouzit fasadu?

radas
Člen | 221
+
0
-

Třeba v modelu Authenticator používám funkci na solení hesla z třídy, která pracuje s heslem a využívaná je i ve třídě, která se stará o profil uživatele.

Co myslíš tou „fasádou“?

rixi
Člen | 109
+
0
-

Tiez pouzivam autowiring, kazdopadne som musel prepisovat jeden projekt pretoze injectovanie v ne-presenteroch mi od Nette 2.1-RC3 uz nefungovalo a pocitam s tym, ze takto to zostane aj v 2.1 final.
Neviem ci sa da tuto podporu aktivovat v configu, aby to fungovalo aj nadalej, ale nenasiel som to.

Model Category

/**
 * @var Models\Profile
 * @inject
 */
public $profile;
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Než se vlákno zvrhne v terminologickou přestřelku :) – model značí logiku aplikace. Otázka:

na co potrebujes model v modelu?

je podle mě zavádějící, pokud jde o blíže neurčené modelové služby, je taková potřeba zcela v pořádku.

Na původní otázku bych odpověděl 1), je to standardní čistý způsob, který bude fungovat i bez speciální DI knihovny. Protože Nette DI má v sobě zabudovaný i autowiring, tak lze konfiguraci dokonce přepsat takto:

common:
	services:
		- Models\Profile
		- Models\Category
Filip Procházka
Moderator | 4668
+
0
-

To co napsal vojta + konstruktor injection.

Eda
Backer | 220
+
0
-

Přesně tak. Vojta + konstruktor. Je to nejlexibilnější, nejčistší a nejméně pracné :-)