Volání metody modelu z jiného modelu

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

Ahoj. Mám podle cca půl roku starého QS modely které více méně odpovídají tabulkám databáze. Problém který teď vyvstal je ale v tom že mám strukturu sport-klub-tým, kde mám v modelu klub metodu která provádí nějaké akce pro daný klub. A teď bych chtěl v metodě modelu sport, která edituje vlastnost sportu, zavolat pro všechny kluby v něm tu metodu z modelu klubu. Je to asi špatně, ale jak z toho ven? Ta metoda je celkem obsáhlá a mít ji v obou modelech je asi ještě víc špatně. Dík

Šaman
Člen | 2666
+
0
-

Nastuduj si 5 vrstev modelu, tebe bude asi zajímat fasáda. Tam patří operace nad celým modelem, které nespadají pod jednotlivé repozitáře.

Edit: v téhle přednášce se fasáda jmenuje servisní vrstva.

Editoval Šaman (20. 2. 2013 3:55)

Filip Procházka
Moderator | 4668
+
0
-

Já ti to shrnu: prostě udělej novou třídu, třeba SportKlubTymMiseNaMars, do ní předej všechno co bude potřebovat (třídu Sport, třídu Klub a třídu Tým – a nebo třeba jen samotné připojení do databáze – jak ti to vyhovuje), napiš ji do services sekce v neonu a pak ji použij v presenteru.

miler
Člen | 75
+
0
-

Aha diky. Takže když v presenteru po zpracování editačního formuláře pro sport:

  1. volám model sportu
  2. pokud se změnily jen údaje jako třeba popisek sportu tak to rovnou upravuji
  3. pokud se změnil status sportu (třeba na vyřazený ze seznamu akceptovaných disciplín) tak chci volat všechny kluby a nastavit jim taky status vyřazený. To mám už hotové v modelu pro klub, protože ta metoda jde volat i samostatně pro jeden klub.

To tedy znamená že celé ty úpravy mám přesunout až do té nové společné třídy? Omlouvám se že se ptám asi jako blb, ale rád bych to pochopil správně :-)


Aha, takže tam přesunu jen tu rozhodovací logiku (typ úpravové akce) a pak si tam zavolám co chci, je to tak?

Editoval miler (20. 2. 2013 17:22)

Stic
Člen | 28
+
0
-

Filip Procházka napsal(a):

Já ti to shrnu: prostě udělej novou třídu, třeba SportKlubTymMiseNaMars, do ní předej všechno co bude potřebovat (třídu Sport, třídu Klub a třídu Tým – a nebo třeba jen samotné připojení do databáze – jak ti to vyhovuje), napiš ji do services sekce v neonu a pak ji použij v presenteru.

Zdravim,

Riesim uplne rovnaky problem ako kolega na zaciatku, a toto riesenie by ma teda nenapadlo. Kazdopadne mi to pride take akesi neohrabane…v konfigu sa mi zacinaju mnozit len same riadky kde nastavujem nove sluzby z repozitarov. mam 9 tabuliek, a pre kazdu mam zvlast repozitar + zakladny Repository – podobne ako je to v QuickStarte.

Okrem toho mam este 4 authenticatory – password, facebook, twitter, a google+, takze v config.neon som skoncil s touto hromadou neprehladnych riadkov :)

<?php
	services:
		routerFactory: RouterFactory
		router: @routerFactory::createRouter

		authenticator: PasswordAuthenticator
		userRepository: UserRepository
		reliabilityHistoryRepository: ReliabilityHistoryRepository

		screenTestResultsRepository: ScreenTestResultsRepository
		screenTestMetaRepository: ScreenTestMetaRepository

		videoTestResultsRepository: VideoTestResultsRepository
		videoTestMetaRepository: VideoTestMetaRepository

		facebook: Facebook( {appId: %facebook.appId%, secret: %facebook.secret%} )
		facebookAuthenticator: FacebookAuthenticator
		facebookInfoRepository: FacebookInfoRepository

		twitter: TwitterOAuth( %twitter.consumerKey%, %twitter.consumerSecret% )
		twitterAuthenticator: TwitterAuthenticator
		twitterInfoRepository: TwitterInfoRepository

		google: Google_Client([oauth2_client_id: %google.id%, oauth2_client_secret: %google.secret%, developer_key: %google.key%])
		googleAuthenticator: GoogleAuthenticator
		googleInfoRepository: GoogleInfoRepository

	factories:
?>

Ak teda potrebujem dalsiu triedu v ktorej si zavolam uz 3 definovane sluzby, tak ju zase musim pridat do configu?

Neexistuje nejake elegantnejsie riesenie?

Dakujem

Filip Procházka
Moderator | 4668
+
0
-

Co třeba tenhle addon?

Ale obecně – imho je to perfektně přehledné, proč si myslíš opak? Já mám takhle v configu stovky služeb. Myslím to smrtelně vážně – stovky! A funguje to co? Perfektně!

Pokud to ovšem nejsi schopný vstřebat (ze začátku je to fakt drsný), tak doporučuji config rozdělit na logické celky a všechny je includnout do hlavního configu, nebo je načíst pomocí Configurator::addConfig

Stic
Člen | 28
+
0
-

Aha, tak mne staci vediet ze nerobim nic priserne zle, coho som sa obaval :)

O tom addone som cital, ale tie authenticatory mi az taky problem nerobia. radsej mam ked mam viac vlastneho kodu ktory mam pod kontrolou, ako zmes addonov.

Dik za radu.

Re4DeR
Člen | 71
+
0
-

Filip Procházka napsal(a):

Já mám takhle v configu stovky služeb. Myslím to smrtelně vážně – stovky! A funguje to co? Perfektně!

taky jsem s tim mel trochu problem(psychickej) a prislo mi to zvlastni takze díky :-)

Filip Procházka
Moderator | 4668
+
0
-

Jen bych pro příště poprosil – založte nové téma kluci. Je daleko lepší mít 1000 krátkých vláken, než 10 nepřehledných. Díky :)