Statické metody vs repository rubrika: Folklór
Zdravím zdejší odborníky,
vybírám nějaké ORM pro svůj projekt, nejde teď o konkrétní framework ale o přístup k programování. Většina se používá nějak takto:
$article = new Article(); $article->title = "The Tigger Movie"; $entityManager->persist($article); // start managing the entity $entityManager->flush(); // save it to the database $articles = $entityManager->getRepository(App\Article::class); $article = $articles->find(1); echo $article->title; // "The Tigger Movie"
Ale našel jsem pár takových které jsou méně ukecané
$article = new Article(); $article->title = "The Tigger Movie"; $article->persist(); $article = Article::getById(1);
Víc mě vyhovuje právě ta druhá varianta - méně kódu, přehlednější, nemusím přemýšlet kde vzít $entityManager.
Tak by mě zajímalo co na to říkají místní guru. O co přijdu pokud použiji ten druhý přístup? Párkrát jsem slyšel že statické metody jsou špatné takže pořád mě to vrtá hlavou.
Pokud chceš jednotkově testovat, tak na ten druhý způsob pozor. To Article::getById(1) se docela obtížně mockuje. U toho prvního způsobu se jenom vymění ten $entityManager, který pak vrací mocky místo repository napojených na reálnou DB a na zbytek kódu se nemusí "sáhnout/přepnout". U toho druhého způsobu by se asi musely podstrkávat mocky každému tomu repository zvlášt. Ne že by to nešlo, ale je to takové zbytečné špinění Active Recordů o testovací kusy kódu, pokud si člověk nechce mocknout rovnou celou connection k databázi. Ono vůbec dependency injection se statickýma metodama je takové "smradlavé". :)
Pro zobrazení všech 5 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře