Technische verbeteringen in Magento 2

categorie / Blog / Kennisdeling / Magento 2
Blogpost---Magento-2---Technische-verbeteringen---Facebook-add

Technische verbeteringen in Magento 2; what’s new?

In deze vierde blogpost over Magento 2 gaan we in op de technische verbeteringen. Bij de ontwikkeling van Magento 2 zijn de ontwikkelaars helemaal teruggegaan naar de tekentafel. Er is eigenlijk een volledig nieuw product ontwikkeld. In de praktijk betekent dat voor bedrijven met een Magento 1 webshop dat upgraden naar een Magento 2 webshop simpelweg niet mogelijk is: er zal een volledig nieuwe e-commerce omgeving moeten worden ontwikkeld om te kunnen profiteren van al het nieuws van Magento 2.

Naast deze kleine domper, brengt Magento 2 ook heel veel voordelen met zich mee. In onze vorige blogposts zijn we al ingegaan op:

Nu vraag je je misschien af waarom de ontwikkelaars van Magento volledig opnieuw zijn begonnen? Magento 1 is in 2007 gelanceerd en is in die negen jaar uitgegroeid tot het meestgebruikte e-commercepakket ter wereld. De technologie is echter enorm veranderd en verbeterd in de afgelopen jaren. Via periodieke updates heeft Magento veel veranderingen door kunnen voeren, maar de basis van Magento 1 blijft draaien op verouderde (en dus langzamere) technologie. Door Magento 2 vanaf de grond opnieuw op te bouwen, kon men afscheid nemen van de verouderde code en zijn de nieuwste technieken toegepast. Backend developer Mike Verhaert vertelt je welke technische veranderingen er zijn gemaakt en waarom dit concreet voor jou als webshopeigenaar, marketing- of e-commerce manager een meerwaarde is.

*Een side-note voor de technische lezers onder ons: veel van de concepten worden sterk versimpeld weergegeven en kunnen hier en daar wat afwijken van de technische implementatie.

Aanpassingen aan de bestandsstructuur

In Magento 2 zijn er diverse aanpassingen doorgevoerd in de bestandsstructuur, om verschillende redenen. Zonder té diep in te gaan op de technieken, zullen we een aantal belangrijke veranderingen toelichten.

Betere beveiliging

Veel bestanden van een webshop moeten voor iedereen toegankelijk zijn. Denk bijvoorbeeld aan het logo van je bedrijf. Dit moet toegankelijk zijn voor een bezoeker, zodat de bezoeker het logo boven je pagina kan zien. We noemen dit ‘publiekelijk toegankelijk’.

Magento 2 beschikt net zoals Magento 1 over duizenden bestanden. Bij heel veel van deze bestanden wil je liever niet dat bezoekers deze kunnen bekijken. Denk hierbij aan bijvoorbeeld aan een bestand waarin bepaalde inloggegevens voor je database of e-mail server staan.

In Magento 1 stonden alle bestanden in een folder die publiekelijk te benaderen was. Het was de taak van de ontwikkelaars en webhosters om te zorgen dat alleen de bestanden en sub-mappen toegankelijk waren die dat daadwerkelijk moesten zijn. In Magento 2 is er een “/pub” (een afkorting van ‘public’) map bijgekomen. Door alléén de bestanden en mappen die publiekelijk benaderd mogen worden in deze map te zetten, en alle andere bestanden buiten deze map, ben je niet langer afhankelijk van een goede configuratie om je bestanden veilig te houden.

Eenvoudigere CDN Implementatie

CDN staat voor ‘content delivery network’ en is een manier om statische bestanden, zoals afbeeldingen en video’s, over verschillende servers rond de wereld te verspreiden. Dit levert twee voordelen op:

  1. De bezoeker kan de bestanden downloaden van een server die dicht bij hem/haar in de buurt is, waardoor de download (en het laden van de pagina) sneller verloopt;
  2. Omdat alle verzoeken naar statische content naar andere servers gaan, hoeven de servers die zich bezig houden met het generen van je webshop minder verzoeken af te handelen. Dit zorgt ervoor dat de servers meer capaciteit overhouden en stabieler zijn.

Magento 2 heeft de mappen met statische content (de skin- en js-map) verplaatst naar een “pub/static”-map. Hierdoor is het gemakkelijker geworden om statische content via CDN te onderhouden.

magento2-directory-structure

(Afbeeldingen van https://darshanbhavsar.wordpress.com/2015/02/03/magento-2-directory-structure/)

Registreren van modules

In Magento 1 zat er bij iedere module een XML-bestand met informatie over de module en een beschrijving of de module actief was. Bij het opstarten van Magento werden alle XML-bestanden verzameld om tot een lijst van actieve modules te komen. In Magento 2 worden alle (actieve) modules centraal in één bestand gezet, waardoor dit sneller in te laden is.

Makkelijker verwijderen, onderhouden en updaten van modules

In Magento 1 stonden de bestanden van een module verspreid over verschillende plaatsen. Bepaalde bestanden die aangaven welke blokken er op een pagina aanwezig waren, stonden op een andere plek dan de bestanden die voor de invulling van de blokken stonden. Daarnaast stonden alle bestanden voor de opmaak op één locatie, buiten de rest van de module.

Magento 2 heeft men een nieuwe modulestructuur geïntroduceerd, waarbij alle bestanden van de module op één en dezelfde plek staan. Hierdoor hoeven de bestanden dus niet op meerdere plekken geplaatst te worden, wat het onderhoud van modules makkelijker maakt. Wanneer een module bijvoorbeeld verwijderd moet worden, hoeft in Magento 2 alleen de hele map verwijderd te worden, terwijl in Magento 1 op verschillende plaatsen gezocht moest worden om de volledige module te verwijderen. Een module-update is hierdoor ook gemakkelijker geworden, aangezien er ook niet gezocht hoeft te worden op verschillende plaatsen naar bestanden van oudere versie. Het onderhoud van modules verloopt hierdoor veel soepeler en sneller.

magento2-module-structure

Nieuwe technieken en technische verbeteringen

Naast veranderingen aan de bestandsstructuur zijn er ook veel technische aanpassingen gedaan. We hebben ons best gedaan om deze begrijpelijk uit te leggen.

Plugins

Magento 1 heeft een aantal mogelijkheden om in te haken op een bestaande functionaliteit. Het was echter soms noodzakelijk om een bepaald onderdeel van Magento te overschrijven. Op het moment dat er 2 verschillende modules hetzelfde onderdeel van Magento 1 zouden overschrijven, dan ontstaat er een conflict. Dit is een van de meestvoorkomende problemen bij het toevoegen van nieuwe modules.

Magento 2 heeft een extra functionaliteit toegevoegd, genaamd “plugins”. Via plugins kun je voor, na en binnen iedere functie inhaken zonder deze te overschrijven. Dit maakt de kans op conflicten veel kleiner, waardoor het uiteindelijk makkelijker wordt om modules toe te voegen aan je webshop.

Design patterns & principes

Een design pattern is het beste te omschrijven als een generiek opgezette softwarestructuur die een bepaald veelvoorkomend type software-ontwerpprobleem oplost. Het is geen kant-en-klare code, maar je moet het eerder zien als een soort sjabloon of een ‘principe’ dat je kunt gebruiken om de oplossing te bouwen.

Magento hanteert het S.O.L.I.D. principe, wat een afkorting is van 5 belangrijke principes bij het ontwerpen en ontwikkelen van software. Een voorbeeld hiervan is het “Single responsibility principle”. Dit houdt simpel gezegd in dat ieder deel van je applicatie één taak moet hebben. Als je bijvoorbeeld een ‘blogbericht’ object hebt, dan moet dit object alleen acties uitvoeren die te maken hebben met blogberichten. Wil je iets doen met een blog auteur? Dan betekent dit dat je een nieuw object zou moeten maken, omdat je blogbericht-object maar één verantwoordelijkheid mag hebben.

Wat is het voordeel van deze veranderingen? Door gebruik te maken van design patterns en zogeheten ‘best practices’ is de code in Magento 2 duidelijker. Hierdoor worden ontwikkelaars gestimuleerd om netter te ontwikkelen, wat uiteindelijk weer leidt tot een beter onderhoudbaar én beter uitbreidbaar systeem. Door deze striktere aanpak van Magento 2 is het vaak in eerste instantie net meer werk om bepaalde functionaliteiten te ontwikkelen, maar zullen de kosten op lange termijn (de “total cost of ownership”) naar verwachting lager worden.

Object manager / Dependency Injection

In Magento 2 is de “Object manager” toegevoegd. De Object manager zorgt er, heel simpel gezegd, voor dat Magento zelf kan bepalen welke onderdelen van het gehele systeem een bepaalde module nodig heeft.

Met behulp van het Design Pattern “Dependency Injection” (de exacte uitleg hierover laten we buiten de beschouwing van dit artikel) zorgt Magento ervoor dat een module precies datgene krijgt wat de betreffende module nodig heeft. Maakt een module gebruik van de database? Dan krijgt de module van Magento een object mee waarmee de module toegang krijgt tot de database. Dependency Injection heeft een aantal voordelen:

  • Het is precies duidelijk welke afhankelijkheden iedere module heeft;
  • Modules kunnen makkelijker vervangen worden, omdat er geen verborgen afhankelijkheden zijn;
  • De kwaliteit van de code wordt hoger;
  • De kans op fouten wordt kleiner.

Het laatste voordeel van Dependency Injection is dat de afhankelijkheden tussen verschillende modules kleiner zijn, omdat iedere afhankelijkheid expliciet moet worden gedefinieerd. Hierdoor kun je (lees: kunnen wij vanuit Techtwo) deze delen afzonderen en los testen.

Geautomatiseerd testen en Test Driven development (TDD)

In Magento 2 is het mogelijk geworden om automatisch te kunnen testen. In Magento 2 is het Test Driven Development principe vanaf het begin toegepast, waardoor het standaard al met heel veel geautomatiseerde tests geleverd wordt. Wanneer je ervoor zorgt dat je voor al je eigen modules ook automatische tests schrijft, kun je op ieder moment je gehele systeem geautomatiseerd laten testen. Je kunt bijvoorbeeld automatisch bij iedere nieuwe release van je site een totale test doen, waardoor de kans op fouten aanzienlijk kleiner wordt.

Binnen Magento 2 wordt het principe “Test driven development” (TDD) gestimuleerd. TDD is kort gezegd een ontwikkelmethode voor software waarbij je eerst begint met het schrijven van je (geautomatiseerde) test en daarna pas van je code. Je begint dus eerst met het nadenken over testcases, en stelt die vanuit het oogpunt van de gebruiker op. Een voorbeelden hiervan is:

  • Als ik een e-mailadres in moet vullen, dan moet dit gevalideerd worden als zijnde een geldig e-mailadres
  • Dit betekent dat een tekst zonder het @-teken niet geldig is

Wanneer alle testscenario’s helder zijn, dan begin je met het schrijven van je geautomatiseerde tests en start je daarna pas met de ontwikkeling van je module. Na iedere aanpassing kun je automatisch al je testscenario’s uitvoeren, waardoor je altijd goed weet of je applicatie nog werkt. In verhouding wordt er dus veel vaker getest dan je wanneer je na een serie van aanpassingen éénmalig handmatig alles door loopt.

De voordelen van Test Driven Development zijn:

  • Doordat alle code vooraf wordt getest geeft dit meer vertrouwen bij de ontwikkelaar en klant;
  • De ontwikkeltijd wordt korter ondanks de extra code die nodig is voor het schrijven van de tests, dit komt doordat fouten al in een vroeg stadium gevonden worden;
  • Alle onderdelen kunnen los van elkaar getest worden, hierdoor is de onderlinge afhankelijkheid kleiner en daarom minder complex;
  • Voor eigen gemaakte modules kunnen voortaan ook tests geschreven worden.

Er zijn natuurlijk ook enkele nadelen of uitdagingen aan TDD:

  • De programmeur schrijft vaak zowel de test als de code voor de functionaliteit. Wanneer de programmeur iets over het hoofd ziet zal dit zowel in de test als in de code gemist worden;
  • Wanneer een groot aantal tests succesvol is, kan de indruk gewekt worden dat de applicatie volledig getest is. Hierdoor is het verleidelijk om een integratie of systeemtest niet meer uit te voeren.

Conclusie

Zoals wellicht al duidelijk is: wij zijn heel erg blij met de veranderingen in Magento 2. Door de nieuwe opbouw, de striktere manier van werken en de mogelijkheid om test-driven te ontwikkelen worden ontwikkelaars gestimuleerd, of eigenlijk gedwongen, om betere code te schrijven en op een nettere manier modules te ontwikkelen. Als ontwikkelaar is het een leuke uitdaging om met al deze nieuwe technieken aan de slag te gaan. Magento 2 is een complexer product, waarvoor je meer technische kennis nodig hebt. We hopen dat er hierdoor een iets hogere drempel ontstaat voor ontwikkelaars en daardoor minder slecht geschreven modules voorbij zullen komen.

Webshopeigenaren zullen dankzij Magento 2 profiteren van een stabielere webwinkelomgeving. Door de betere structuur is Magento 2 makkelijker uit te breiden met modules en door het geautomatiseerd testen kan je met een veiliger gevoel je releases uit brengen. En last but not least: webshopeigenaren zullen profiteren van de betere performance van Magento 2. We zullen hier binnenkort dieper op inzoomen in een losse blogpost. Stay tuned!

Hebben we jouw interesse gewekt?

We vertellen je graag meer over de mogelijkheden onder het genot van een goede kop koffie!

Neem contact op

Hebben we jouw interesse gewekt?We vertellen je graag meer over de mogelijkheden onder het genot van een goede kop koffie!

Jorden van den Beuken account manager
Giwanni Schaap account manager