Tharos / LeanMapper

Lean Mapper is a tiny ORM based on powerful Dibi database abstraction library for PHP.
MIT License
87 stars 35 forks source link

DefaultMapper: added $defaultEntityNamespace to constructor #113

Closed janpecha closed 4 years ago

janpecha commented 7 years ago

Umožňuje předat $defaultEntityNamespace přímo do konstruktoru, takže odpadá nutnost dědit, jen abychom změnili výchozí namespace.

$mapper = new LeanMapper\DefaultMapper('App\Model\Entities`);

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ýt null).

castamir commented 7 years ago

Jinak nevím, nevidím tam moc přínos - dědičnost mi v tomto případě přijde lepší

janpecha commented 7 years ago

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.

castamir commented 7 years ago

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

janpecha commented 7 years ago

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.

Thoronir42 commented 5 years ago

Č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?

janpecha commented 5 years ago

@Thoronir42 ahoj, mám v plánu tohle mergnout co nejdřív, bude to součástí verze 4.x.