Skapa egen modul och publicera som paket på Packagist

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Skapa egen modul och publicera som paket på Packagist

Inlägg25 apr 2014, 18:00

Artikeln "Bygg ut ditt Anax MVC med en egen modul och publicera via Packagist" är en del av kursen phpmvc version 2.

Det handlar om att göra en egen modul som kan inkluderas i Anax MVC och publiceras via Packagist.

Här kan du ställa frågor om artikeln, kommentera, föreslå moduler som du tycker passar in i ett ramverk, eller kanske showa-off ditt egna paket.
...
..:
.... /mos

urbvik

sql-kodare

  • Inlägg: 53
  • Blev medlem: 18 jan 2015, 22:31

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg11 apr 2016, 07:44

Hej!

Jag när jag sitter och läser denna uppgift känner jag att jag vill jag ställa ett par kompletterade frågor innan jag börjar. Det hoppas jag minskar risken att jag inte gör/tolkar fel och behöver göra om...

Fråga 1: Det verkar väldigt fritt vilken modul/paket man kan utveckla. Jag har tittat lite framåt i kursen och sett att ett paket/klass som hanterar inloggning och utloggning av användare vore kanske nyttigt att ha. Jag tänker mig att skapa en klass CuserBase med metoderna getForm, login, logout, isAuthorised, getUserInfor. Verkar det som en vettig och godkänd modul?

Fråga 2: Det enklaste när jag utvecklar denna modul vore (anser jag) att böra med en tom AnaxMVC-installation, skapa klassen och några testroutes. På detta sätt får jag en mindre kod-bas än om jag bygger vidare på den som jag utvecklat i kunskapsmomenten1-4. Det blir (tror jag) enklare för mig att hålla koll på de filer som jag hanterar i projektet. Är det okej att göra så? I sådana fall blir redovisningssidan skriven bara för detta moment och det går inte att läsa och kolla föregående moment utan att växla till dessa moment. Är det ok?

mvh
/Urban
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg11 apr 2016, 15:59

1) Ja, det låter som en trevlig modul vid en första anblick.

2) Det allra enklaste är att du lägger din modul i ett helt eget repo på GitHub som du publicerar på Packagist.

När du sedan integrerar modulen med ditt Anax så kan du lägga modulen i din composer.json så inkluderas den och autoloadern hittar klasserna.

Då kan du göra både ock, dels ha en ren och enkelmiljö för din modul och dels testa den i ditt Anax.

Försök tänka på att en fristående modul, utan beroende till Anax, är enklast. En modul som har beroende till Anax, databas, eller andra externa resurser som $_SESSION, gör det hela mer komplext när sakerna skall enhetstestas. Det är bra övning att göra det lite mer komplext. Men vill du hålla det enkelt så väljer du att utveckla en modul som inte har några yttre beroenden.
...
..:
.... /mos

urbvik

sql-kodare

  • Inlägg: 53
  • Blev medlem: 18 jan 2015, 22:31

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg11 apr 2016, 19:07

Jag testade lite nu efter middagen. Det blev en klass CUserBase som ärver av CDatabaseModel.
CDatabaseModel klassen kräver i sin tur (som du/ni vet) DI av CDatabaseBasic. CDatabaseBasic använder i sin tur en config-fil med databas-anslutnings-inställningarna. Allt verkar funka fint.

Däremot funderar jag om jag uppfyller kriteriet 5 för uppgiften ("Om modulen är beroende av andra moduler eller tjänster så skall du använda dependency injection för att hantera det") då jag använder ett arv. Eller bryter jag då mot DI-principen?

Jag googlade-lite om Dependency Injection och så vitt jag förstår är inte arv ett beroende som faller under det kriteriet?

Vad säger ni experter? Mos mfl.?

/Urban
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg11 apr 2016, 19:38

Länk till GitHub så vi kan se repot med koden?
...
..:
.... /mos

urbvik

sql-kodare

  • Inlägg: 53
  • Blev medlem: 18 jan 2015, 22:31

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg12 apr 2016, 09:37

Jag lade koden på: https://github.com/uvil/phpmvc

Det kanske mest intressanta finns i mappen src/UVC
https://github.com/uvil/phpmvc/tree/master/src/UVC

Speciellt arvet i klassen CUserBase (är av intrese för frågan ovan)
https://github.com/uvil/phpmvc/blob/master/src/UVC/CUserBase.php

mvh
/Urban
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg12 apr 2016, 17:04

Låt oss säga så här. Om din modul löser uppgiften så är det kanske tillräckligt bra.

Det finns många olika typer av moduler man kan göra och låt oss ha en liten friare inställning till vad som är "rätt" och "fel".

Men, om vi har en hög ambitionsnivå så skall du inte kopiera in databasklasserna på det viset du gör, det beroendet löser du med composer.json och att databasklasserna återanvänds från sin plats i vendor-mappen.

Databasen är en del av ramverkets tjänster som finns i $di och du kan injecta $di in till din klass. Din klass får alltså implementera interfacet IInjectionAware genom att använda tex traitet TInjectionAware.

Din klass är tätt kopplad till Anax så det är lite svårt att lägga den som ett eget repo på GitHub och publicera det på packagist. Men det går, och egentligen är det det som du behöver göra, att skapa ett eget repo, likt phpmvc/comments, som du publicerar på Packagist.

Det som är spännande är att du nu har en modul som kräver att den jobbar i tät samverkan med ramverket, men den är ändå en fristående modul i ett eget Git repo. Tänk på hur modulen phpmvc/comment fungerade. Det hjälper dig igenom detta kursmomentet.

I nästa kursmoment kommer en ny utmaning när vi inför enhetstester. Men det finner vi lösningar på i artiklar som ligger under:
http://dbwebb.se/phpmvc/kmom06#ovningar

Men lös kmom05 först.
...
..:
.... /mos

urbvik

sql-kodare

  • Inlägg: 53
  • Blev medlem: 18 jan 2015, 22:31

Re: Skapa egen modul och publicera som paket på Packagist

Inlägg13 apr 2016, 09:24

Jag är tacksam för att du/ni har en så vid bedömning av vad som är "rätt". Utifrån ditt svar tolkar jag det som att min lösning inte är den bästa (vilket jag håller med om) men att den kan duga.

Dina rader om att använda databasen som en tjänst istället för ett arv var mycket förtydligande. Nu tror jag att jag förstår hur en bättre lösning borde se ut.

Anledningarna till att jag valde att kopiera in klasserna från vendor-mappen var/är: att jag slipper en massa "onödig" kod som medföljer vid importen av hela modulen och att jag chansar på att det kanske blir lättare att enhetstesta.

Att min modul är tätt kopplad till anaxmvc håller jag med om - momentet heter ju trots allt "Utvidga ramverket". Fast det är klart att det vore ännu bättre om det var mer fristående...

Kanske sätter jag mig och provar att skriva om koden enligt dina råd ovan. Det vore kanske bra. Jag ska fundera lite. Känner bara ett litet motstånd till att vendor-mappen tenderar att innehålla en massa oanvänd kod...

/Urban

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 18 gäster