Closed janpecha closed 4 years ago
Jinak nevím, nevidím tam moc přínos - dědičnost mi v tomto případě přijde lepší
Pokud někdo používá implicitní filtry nebo single table inheritance, tak to skutečně moc přínos nemá, protože tak jako tak musí ten mapper podědit, nebo si napsat vlastní.
V ostatních případech - kdy člověk nepotřebuje mapper dědit - to však smysl má. Třeba já na projektech používám stále stejný mapper, u kterého jen potřebuji změnit namespace pro entity podle konkrétního projektu. V konfiguračním souboru tedy napíšu:
leanmapper:
defaultEntityNamespace: App\Model\Entities
A tahle hodnota se mi předá přes konstruktor do mapperu a nic víc nemusím řešit.
Já používám vlastní extension - je to součástí balíčku s celou řadou drobných rozšíření (Query Object, automatická registrace repozitářů, specifické mapování entit do různých namespace, včetně zanořených atp)
https://github.com/Joseki/LeanMapper-extension/blob/master/src/Joseki/LeanMapper/DI/Extension.php
Taky nad tím mám ještě extension pro Nette, to v tomto případě ale nehraje příliš roli. Pokud projekt od počátku dodržuje stanovené konvence, tak statický mapper v mnoha případech úplně stačí a jediné co je potřeba, je změnit globálně výchozí namespace. A to by IMHO mělo být možné i bez dědičnosti.
Samozřejmě záleží na konkrétním projektu - jsou projekty, kdy statický mapper dostačuje, jsou projekty kdy ne a je potřeba sáhnout po něčem složitějším.
Čuus, mrtvoly. Jste pro oživení rok starýho PR?
IMHO tahle úprava má smysl už jen z hlediska návrhu, osobně se vždycky snažím upřednostňovat kompozici před dědičností protoŽe se tím spoousta věcí zjednodušuje... No a myslím si že každá komponenta aplikace by měla být co nejjednodušší, takže bych do toho vůbec netahal žádný extensiony a koukal se fakt jen na ten samotnej mapper a jak se používá.
Imho defaultní hodnoty jsou fajn ale jen pokud mají smysl a dají se rozumným způsobem upravit a dědičnost je imho naprosto nepatřičná pro změnu jedný proměnný. 😛
Teďka si píšu modulární mapper, kterej podle tabulkovýho prefixu rozpoznává aplikační namespace a mám z něj strašnou radost protože mi pomáhá strukturovat aplikaci do modulů už na úrovni datový vrstvy... ale to je bokem. Problém mám už jen u testování, kdy abych ten mapper mohl použít smysluplně, musím dělat tohle: https://github.com/SeStep/modular-lean-mapper/blob/master/test/SimpleMapper.php a z toho jsem neskutećně smutnej.
Mohl bych vás teda, kluci, poprosit, abyste nějak protlačili tenhle PR a pomohli ze světa udělat o trošku hezčí místo?
@Thoronir42 ahoj, mám v plánu tohle mergnout co nejdřív, bude to součástí verze 4.x
.
Umožňuje předat
$defaultEntityNamespace
přímo do konstruktoru, takže odpadá nutnost dědit, jen abychom změnili výchozí namespace.Změna by měla být plně zpětně kompatibilní (doufám), viz test. Pak jsem ještě opravil anotaci u property (
$defaultEntityNamespace
může býtnull
).