Pouziti vice nezavislych objektu v modelu/objektu

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

Lamu si hlavu s tim, jak spravne sestavit reseni pro vyuziti vice (uz hotovych) nezavislych objektu. Nedari se mi prijit na nejake ciste reseni, se kterym bych byl spokojeny.

Vysledkem snazeni by mel byt overovaci objekt, ktery dokaze podle zaslanych informaci urcit, jestli je mozne vytvorit novy zaznam do db (o to se pak uz postara objekt k tomu urceny). Je vice ruznych kriterii, ktere se overuji. Problem je v tom, ze cast veci uz dokazou overit jine objekty v systemu, cast je dostupna z jineho systemu pomoci webovych sluzeb a posledni cast je nejlepsi overit primo dotazem do db.

Prototypove mam zatim hybrid:

<?php

class DataVerificator
{
	private $db;

	public function __constructor(Connection $db)
	{
		$this->db = $db;
	}

	public function overPortfolio($userID, $produktID)
	{
		// koukne primo do db, jestli ma uzivatel dany produkt ve svem portfoliu
	}

	public function overCertifikaci($userID, $produktID, $datum)
	{
		// Uz existuje objekt s overovaci logikou a ano, je staticky
		return OverCertifikaci::over($userID, $produktID, $datum);
	}

	public function overKlientSouhlas($userID, $idklient, $datum)
	{
		// potrebuji inicializovat objekt pro webove sluzby a prislusnou sluzbu zavolat
		// ... new WeboveSluzby();
	}

	[ ... ]
}

?>

Kdybych vsechny zavislosti nacpal do konstruktoru, tak neprijemne bobtna. No a prakticky ty objekty nepotrebuju naraz, ale jenom pri pouziti nekterych metod. Jine metody budou zase potrebovat jine objekty. Dat to nakonec primo do parametru tech metod?

Hotove reseni by melo byt „maximalne“ nezavisle, protoze ho bude vyuzivat jak vlastni modul, tak i webove sluzby, ktere ho nabidnout druhemu systemu (nebo podle potreby jenom urcitou cast overovacich sluzeb).

iNviNho
Člen | 352
+
0
-

Mne len nesedí, že class je DataVerificator a metody v ňom sú overPortfolio :(

suwer
Člen | 33
+
0
-

Ten priklad je fakt jenom myslenkovy nastrel :-). Realne zatim ma nekolik has a is metod.

F.Vesely
Člen | 369
+
+2
-

Ja bych si na vse udelal zvlast Verificator (Portfolio, Certifikace, KlientSouhlas) a tam mel jen zavislosti, co s tim souvisi. Pokud potrebujes jen jednu tridu na overovani (DataVerificaator), tak si v constructoru predej vsechny ty Verificatory a pak volej jen jejich metody.

suwer
Člen | 33
+
0
-

F.Vesely napsal(a):

Ja bych si na vse udelal zvlast Verificator (Portfolio, Certifikace, KlientSouhlas) a tam mel jen zavislosti, co s tim souvisi. Pokud potrebujes jen jednu tridu na overovani (DataVerificaator), tak si v constructoru predej vsechny ty Verificatory a pak volej jen jejich metody.

Hmm, asi jo. Sice vetsi cast trid bude mit pouze kontruktor se zavislosti a jednu overovaci metodu, ale aspon budou mit jenom ty zavislosti, ktere opravdu potrebuji. Navic uz tam krasne vidim rozhrani. A pokud vznikne potreba mit jednu tridu pro overovani (jakoze jo, kvuli vetsimu pohodli), tak dava smysl ji predat vsechny zavislosti/verificatory.

Paradoxni je, ze puvodne jsem to opravdu chtel delit na specializovane tridy, pak me odradila ta jednoucelovost a zaroven vznikajici potreba mit to pekne pohromade. A nakonec jsem se do toho zamotal. Diky za nakopnuti.