19 november 2018
Veranderingen voor Magento 2 backend developers
Yireo Blog
dinsdag, 30 april 2019: Magento 2 Backend Development I training in BirkStaete Soest, Nederland » Meer informatie

Veranderingen voor Magento 2 backend developers

Op vrij reguliere basis geef ik inmiddels al 3 jaar lang de zogenaamde Magento 2 Development I cursus: Deel 1 van een 2-delige cursus waarmee een backend developer de handvaten krijgt voor module ontwikkeling in Magento 2. De cursus is in die jaren niet veel veranderd, maar er zijn toch wat cruciale aanpassingen geweest die misschien leuk zijn te delen in een blog. Hierbij dus wat losse trucs uit de trainingspraktijk.

Composer trucs

De backend cursus begint met de installatie van Magento 2: Niet met stap-voor-stap door een wizard heen lopen. In plaats daarvan is er aandacht voor geavanceerdere concepten van composer. Het gebruik van Prestissimo is hierbij een oude truc. Vooral het advies over composer repositories is in de loop der jaren veranderd. Niet omdat composer hierin andere opties geeft, maar simpelweg omdat Magento extensie providers steeds meer composer omarmen. Zoals het hoort.

Yireo is onderdeel van ExtDN (een samenwerking van internationaal bekend Magento extensiebouwers) en daarmee actief in een aantal werkgroepen rondom kwaliteit. Een van de dingen die ExtDN is gaan roepen is dat composer juist bij commerciele extensies onmisbaar is. En het is simpel om dit voor elkaar te krijgen: Ofwel via de Magento Marketplace, ofwel via een private Satis repository, ofwel via een artifact repository, ofwel via een eigen API. Composer moet gewoon altijd gebruikt worden. Geen app/code meer dus.

ViewModels in plaats van Blocks

Met Magento 2.2 werden View Models toegevoegd aan de thema-laag van Magento. En aangezien deze nieuwe classes tot veel betere code leiden (compositie in plaats van inheritance) is de Yireo cursus inmiddels aangepast om daar de focus op te leggen: Eerst ViewModels snappen, dan pas Blocks.

Backward Compatibility Policy

Backward compatibiliteit is een issue geweest. Met de upgrade van 2.0 naar 2.1 brak er veel code (vooral dankzij dat je niet al-geinjecteerde classes opnieuw mocht injecten) en dat was voor velen een reden om Magento als instabiel te kenmerken. Dat klopt niet helemaal: Het was niet perse instabiel, het was meer dat de backward compatibiliteit van 2.1 verkeerd was aangepakt.

Sindsdien is er veel veranderd, zoals de officiele documentatie hierover laat zien: De Backward Compatibility Policy is een complex mechanisme geworden, maar vooral met de positieve boodschap dat er precies uit blijkt wat voor soort code in de toekomst problemen kan gaan geven. De meeste bugs in derde partij code, die ik zelf ben tegen gekomen, hebben te maken met het niet goed begrijpen van dit nieuwe beleid. De policy is dus zeker de moeite van het lezen waard.

SearchCriteria met een lange adem

Ik kort de namespaces hier even af. Tijdens het programmeren van Magento 2 modules loop je al snel tegen repositories aan. Je wordt niet meer geacht rechtstreeks van andermans modellen gebruik te maken - in plaats daarvan maak je gebruik van service interfaces die uiteindelijk weer naar bijvoorbeeld repositories leiden. Een repository geeft je gemakkelijke toegang tot het gebruik van entiteiten, zoals producten.

Stel je wilt een lijst hebben van producten, dan injecteer je in jouw eigen code een RepositoryInterface die jou weer een Repository object geeft. Dat object heeft vervolgens een getList() methode. Maar die methode kan je alleen aanroepen via een SearchCriteria. Dat is weer geen kant-en-klaar ding: Een SearchCriteria moet je bouwen via een SearchCriteriaBuilder. De getList() methode geeft uiteindelijk een SearchResult en daaruit peuter je weer de items die je nodig hebt. Een hele mondvol. En zeker niet gemakkelijk.

SearchCriteriaBuilderFactory

In de praktijk is gebleken dat deze procedure eigenlijk niet volledig is: Aan een SearchCriteriaBuilder instantie geef je allerlei parameters mee om uiteindelijk de SearchCriteria te bouwen die je wilde. Maar een SearchCriteriaBuilder is standaard een singleton, waardoor jouw instantie misschien al vervuild is geraakt doordat iemand anders de singleton al heeft gevuld met andere gegevens. De oplossing is dus eigenlijk een SearchCriteriaBuilderFactory te maken die een SearchCriteriaBuilder genereert. Met een fluitje.

Het gebuik van repositories kan dus best complex zijn. En misschien is het dus handiger daar een eigen abstractie-laag tussen te zetten. Eentje waarin je gemakkelijk een SearchCriteria object genereert bijvoorbeeld. Ik heb hier zelf ooit een eerste aanzet voor gemaakt: github.com/yireo/Yireo_CatalogUtils Het is zeker niet af (want ik draai geen projecten voor mijn beroep) maar het geeft misschien inspiratie (of PRs).

GitHub repos

Ter aanvulling, de Yireo repository op GitHub is inmiddels voorbehouden tot Magento (of React of PHP) projecten die theoretisch in productie zouden kunnen komen, terwijl de Yireo Training repository langzaamaan een leuke schare aan demo's geeft: github.com/yireo-training

Veranderingen in andere cursussen

Veranderingen in andere cursussen zijn vaak groter. Bijvoorbeeld zet de introductie van CQRS in het MSI project de huidige database architectuur op losse schroeven. Magento 2.3 introduceert hier al wel wat voorbeeldcode van (Queries en Commands) maar de grote omslag is waarschijnlijk met Magento 2.4 te verwachten.

CQRS haakt weer op een andere nieuwe feature - GraphQL - die juist weer inhaakt op de komst van React en PWA. Er staat daarmee vooral op het frontend gedeelte heel veel nieuws te wachten.

React training

Inmiddels heeft Yireo (nou ja, ik dan) ook zijn eerste React trainingen achter de rug, meerdere PWA consults (inclusief GraphQL en Magento PWA Studio), een Docker training in verband met de herorientatie op microservices. Meer informatie over ons React aanbod vindt je hier terug: yireo.nl/react-training

Het is druk geweest. Binnenkort zal er ook maar eens een evaluatie van Reacticon moeten plaats vinden.

Geschreven door Jisse Reitsma op 19 november 2018

Behoefte aan een training op maat?
Dat gaat we doen!

Een training kan op maat en op locatie worden gegeven. Hierdoor weet je zeker dat de tijd optimaal wordt benut en dat de training zeker de moeite waard is. Om de training op maat te maken overleggen we eerst over de vorm en de onderwerpen. Hierna sturen we een offerte op. Zie hiervoor ook onze tarieven. Sinds 2011 hebben we al honderden bedrijven (geen grap en geen overdrijving) van een professionele opleiding voorzien. We beloven je dat het inspirerend en leerzaam is!