Hlavní navigace

Názor ke článku PHP Jet - Dependency Injection, továrny a tak dále od BoneFlute - Co se týče DI: Řekl jste to jasně:...

  • 12. 2. 2023 5:05

    BoneFlute

    Co se týče DI: Řekl jste to jasně: "nechcete". V takovém případě naprosto v pořádku.
    Co se nás ostatních týče, tak já se klidně podřídím nějaké zásadě, má-li výhody.

    Vaše chyba v úvaze je: "Je to závislost – daná třída potřebuje jinou entitu a její informace, ale řešit ji jinak než implementací uvnitř je zcela mimo hru."
    Samozřejmě je v pořádku zadrátovat nějakou závislost na nějakém rutině - pokud neočekávám, že ta rutina bude mít různé varianty. Takže statická třída, nebo statické metody, funkce, proč ne.
    Ale třeba instance třídy, to už dost dobře nejde. A aby si ji nějak pokoutně vytahovala - to jsme tu měli (vzor registry), není to dobrý nápad.

    Popisujete "Ale kdykoliv tam mohu doplnit libovolný algoritmus, který se automaticky promítne do celé aplikace – celého projektu.". Chápu-li to dobře, vy prostě hrábnete do kódu, a nahradíte nějakou rutinu novou verzí. To může za určitých okolností fungovat. Ale testovat bych to nechtěl. Taky bych viděl nevýhodu v tom, že pak nemůžete používat původní verzi. Místo toho, abyste nakonfiguroval objekt tak aby se choval nějak, a podruhé aby se choval jinak, tak budete... hmm asi nějak složitě.

    Píšete "Když už si nějaká třída / entita řeší své závislosti" - entita v mnoha případech neví, jaké konkrétní závislosti má potřebovat. Například zda má načítat z MySQL, nebo SQLite. Toto se neosvědčilo.

    Píšete "Pro tu instanci si produkt může hezky „sáhnout“ (teď je jedno kam a jak) pro SOAP klienta" - myslím, že tímto jste to vypíchl. Ano, toto se používalo a není to dobrý způsob.

    Zdůrazním jeden argument, proč se DI a IoC (mimo jiné) prosadilo: čitelnost. Pokud třída nějakým způsobem pokoutně vytahuje své závislosti, tak nejsem schopen uhlídat co se kdy zavolá, kolik toho je, co všechno budu muset přepsat v případě refactoringu, ani nevím, jak mohu ovlivnit chování daného objektu.

    Píšete "A nevytvářet problémy tam kde nejsou tím, že se z něčeho v podstatě jednoduchého udělená něco co je složité." - Mám kolegu, který psal taky prostě jednoduše. Postupně jsem mu začal ukazovat, jak fantasticky dokáže zjednodušit a pročistit kód dodržování pár základních principů (DI + DIC, princip lokality). Ze začátku byl skeptický, ale teď je z toho nadšen.

    Myslím si, že není nic špatného používat "svůj" styl. Proč ne. Je to umění. Ale pokud chcete dělat v průmyslu, tak to, jak to máte v php-jet vymyšlené není dobře. Je to tak deset let zpět, kdy se kód navrhoval způsobem jak to děláte vy, a neosvědčilo se to.