Refaktoring private metody do třídy rubrika: Programování: PHP

1 frantisek.sitner
položil/-a 3.1.2016

Ahoj, mám privátní metodu, která je docela dlouhá a přemýšlím nad tím dát jí do třídy abych jí mohl otestovat (http://refactoring.com/catalog/replaceMethodWithMethodObject.html), ale nezdá se mi, že bych pak tu novou třídu vytvářel v té stávající. Neporušuje to IoC? Děláte to, nebo testujete jen public metody?

Komentáře

  • arron : Když to trochu víc rozvedeš, tak Ti určitě někdo lépe poradí :-) Takhle se bavíme o jakémsi neurčitém případu, který může mít mnoho různých řešení :-) 4.1.2016
odkaz Vyřešeno
6 arron
odpověděl/-a 4.1.2016

Asi bych se nejdříve ptal, co je to za funkci, patří vůbec do té třídy (nebo dělá "něco navíc", co už by mělo být někde jinde), proč vyžaduje přístup k datům té třídy (a nedalo by se to vyřešit předáním parametru), atd. Podle toho se pak můžeš rozhodnout, jestli vytvoříš celou novou službu, nějakou pomocnou třídu nebo třeba funkci ve třídě i necháš.

Komentáře

  • frantisek.sitner : Mám container a v něm metodu, která vytváří třídy. Potřebuje se podívat jestli nejsou zaregistrované závislosti dané třídu, získat parametry atd. Proto potřebuje věci z té stávající. 5.1.2016
  • Kit : @frantisek.sitner: To bude nějaký omyl. Metoda nemůže vytvářet třídy. Kromě toho by kontejner neměl nic vytvářet, jeho úkolem je pouze skladovat. Na vytváření instancí použij nějaký builder. Vypadá to, jako kdyby ses snažil obejít použití databáze. 5.1.2016
  • frantisek.sitner : @Kit: Ano je to builder, napsal jsem jen container, ale je to containerbuilder. 5.1.2016
  • arron : @frantisek.sitner: Jak tu píšou ostatní, mělo by být možné voláním public metod projít všechny možné případy (a tím pádem celý kód) v private metodě a tím to celé otestovat. Pokud to tak není, tak je možné, že je v té private metodě nějaký nedosažitelný kód, který je tam navíc. Jak se tu už dále někde napsalo (a ano není to uplně doporučovaný a preferovaný postup, ale osobně jsem toho názoru, že v určitých případech je to velmi efektivní a v testech akceptovatelné), můžeš použít reflexi k zavolání private metody i z testů. Chápu, že tenhle konkrétní případ může být dost zapeklitý. Aniž bych viděl konkrétní kód, zkusil bych se nad tou metodou zamyslet, jestli by se některé její části nedaly vyčlenit do dalších menších metod. Řekl bych, že zjistíš, že některé části spolu tvoří logický celek, který se dá zabalit do rozumně pojmenované metody, které předáš parametr a ona Ti něco vrátí. Jak psal tady někde Kit, intuitivně v delších metodách oddělujeme takové logické celky prázdnými řádky. Pokud se Ti tohle povede, pravděpodobně získáš na celý problém trochu jiný pohled, který Tě s trochou štěstí popostrčí někam dál. Jinak pokud řešíš konkrétně nějaký DI container, tak bych se vůbec nestyděl se inspirovat, jak takové věci řeší někdo další, Nette DI a třídy okolo :-) 5.1.2016

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.