de korszerű OOPben illik paraméterben kapni minden kontextust amivel az adott kód kommunikál. Ez leginkább a "dependency injection" témaköre (globális állapot eliminálása). Jobb minőségű, tesztelhetőbb kódot eredményez.
Azt mondják, Laravel esetében a Facade pattern ad magyarázatot ezekre a statikus hívásokra.
Azt viszont nem tudom, mi magyarázza, hogy az alaptelepítés (amiben tényleg csak az alapok vannak) 40-valahány mega -- de úgy látszik, ez a divat, hogy egy "hello world"-höz is saját szerver kell.
ezek nem igazi statikus hívások, csak annak látszanak.
Részletesebb magyarázatért ajánlom ezt a videót: http://t.co/dVOLY4BgIJ
Ezen belül 14:25-től kezdi magyarázni az "ál"-statikus hívásokat.
Röviden például ez:
Szerintem, ha már OOP akkor azt csináljuk rendesen, és minden objektum csak azt manipuláljon, amihez köze van. Ha ez nem teljesül, akkor az OOP nem teljesül.
A User objektum egyetlen usert testesít meg, és nem a userek kollekcióját. Az ezen hívott delete metódus az adott rekordot törli, mi viszont a táblát szeretnénk kitisztítani (DELETE * FROM User). (Legalább is én így értelemzem a kódot).
Persze lehetne egy default kollekció, mondjuk Users néven, ami rövidítés a DB::table('users') -re, de ez már személyi preferencia kérdése.
Elelne szól például, hogy a globális névteret szennyezzük, amikor adott esetben a DB jöhetne paraméterben (eltekintve attól, hogy itt statikus).
De most komolyan, mi köze a Seed-nek ahhoz, hogy a User hol, és miként tárolja az adatait? Még egy User::deleteAll() is szimpatikusabb, minthogy túrkáljunk egy táblában, amihez egyébként semmi közünk, mivel nem is mi fogjuk adattal feltölteni, hanem egy másik osztály.
Vegyünk csak egy egyszerű példát. Korábban adatbázisban tároltam a felhasználókat, de a jobb skálázódás érdekében megváltoztatom a tárolást, mondjuk egy felhő szolgáltatásra, aminek ugye van egy API-ja, amit szépen implementálok is a User-ben, hogy azt használja. Ekkor ha jól csináltam a dolgomat, akkor sehol máshol nem kell változtatnom, elvégre a User felelős önmagáért. Viszont a DB-vel való szoros összefonodás más, a User-től független osztályban csak nehézségek árán tenné lehetővé, hogy megváltoztassam azt, ahogy a User tárolódik.
Valóban nem szerencsés, helyette akkor lehet User::all()->delete();. Mondjuk nekem a beépített ORM-je elég fapadosnak tűnik, szóval ez a manuális hekkelés akár bele is férhet.
sok static
Miért?
Csak tipp...
Facade
Azt viszont nem tudom, mi magyarázza, hogy az alaptelepítés (amiben tényleg csak az alapok vannak) 40-valahány mega -- de úgy látszik, ez a divat, hogy egy "hello world"-höz is saját szerver kell.
Ez így van,
Részletesebb magyarázatért ajánlom ezt a videót: http://t.co/dVOLY4BgIJ
Ezen belül 14:25-től kezdi magyarázni az "ál"-statikus hívásokat.
Röviden például ez:
Alias
Ki kell próbálni.
Ezeket a DB hívásokat nem
Szerintem teljesen jogos,
De miért ott?
A User
Persze lehetne egy default kollekció, mondjuk Users néven, ami rövidítés a DB::table('users') -re, de ez már személyi preferencia kérdése.
Elelne szól például, hogy a globális névteret szennyezzük, amikor adott esetben a DB jöhetne paraméterben (eltekintve attól, hogy itt statikus).
Mi köze?
User::deleteAll()
is szimpatikusabb, minthogy túrkáljunk egy táblában, amihez egyébként semmi közünk, mivel nem is mi fogjuk adattal feltölteni, hanem egy másik osztály.Vegyünk csak egy egyszerű példát. Korábban adatbázisban tároltam a felhasználókat, de a jobb skálázódás érdekében megváltoztatom a tárolást, mondjuk egy felhő szolgáltatásra, aminek ugye van egy API-ja, amit szépen implementálok is a User-ben, hogy azt használja. Ekkor ha jól csináltam a dolgomat, akkor sehol máshol nem kell változtatnom, elvégre a User felelős önmagáért. Viszont a DB-vel való szoros összefonodás más, a User-től független osztályban csak nehézségek árán tenné lehetővé, hogy megváltoztassam azt, ahogy a User tárolódik.
Valóban nem szerencsés,
User::all()->delete();
. Mondjuk nekem a beépített ORM-je elég fapadosnak tűnik, szóval ez a manuális hekkelés akár bele is férhet.Csak azért raktam fel, hogy érdekes.