Avatar billede chrisrj Forsker
04. marts 2019 - 11:53 Der er 8 kommentarer og
1 løsning

Modulært system?

Hejsa

Jeg har lavet grundstammen til et (OO baseret) CMS, og er nu nået til den del, hvor moduler kommer ind i billedet.

Et modul kunne f.eks. SMS integration - dvs. login via sms, brug funktioner via sms, backoffice styring osv.
Alle disse funktioner har jeg, så problemet er "bare" hvordan jeg integrere det på en god måde, så sysadmin bare kan klikke "aktivér"?

Jeg finder ikke rigtigt nogle på google, kun guides til eksisterende CMS systemer.

SÅ: Har I nogle tips/guides/et-eller-andet jeg kan tage udgangspunkt i?? :)
Avatar billede Slettet bruger
04. marts 2019 - 12:21 #1
vi kalder det plugin

din grundstamme skal have et interface, så når du tilføjer et plugin, bliver dit plugin et aktivt stykke kode af det hele. på et moduldiagram er det er stykke subrutine som udveksler variabler og bliver kaldt af en højere liggende styrerutine.

?
Avatar billede Slettet bruger
04. marts 2019 - 12:23 #2
så det du skal kode er noget som importerer plugin navnet, og aktiverer med variabler
Avatar billede chrisrj Forsker
04. marts 2019 - 12:25 #3
Ja, jo. Det er også fint. :)

Men når modulerne, sorry plugins!, skal "sovses" ind i grundstammens klasser - f.eks brugerkonto. Hvordan gør det bedst? Jeg ser et uhyggeligt rod af IF'er... :-/
Avatar billede Slettet bruger
04. marts 2019 - 12:52 #4
du kan jo prøve at se på wordpress. se den før og efter et plugin er installet.
se hvordan de har gjort det.
Avatar billede Slater Ekspert
04. marts 2019 - 12:52 #5
Jamen f.eks. som sidwave er inde på, du laver interfaces til alle de grundklasser, og så bruger du evt. en IoC-container eller service handler til at lade moduler overtage en service ved at nedarve eller erstatte de eksisterende klasser.

Tag et simpelt eksempel hvor du har en User-klasse med en login()-metode, og denne tager hele $_REQUEST array'et som argument, men benytter kun "username" og "password". Nu vil du lave et modul der også kan logge ind med "phone". Så laver du et modul med en "PhoneModuleUser extends User" klasse, og overskriver login()-metoden med en der også accepterer telefonnummer. Så mangler du bare at registrere PhoneModuleUser klassen som den User-klasse der bliver benyttet af systemet, via IoC/services.
Avatar billede chrisrj Forsker
04. marts 2019 - 13:06 #6
Hmm...og hvis man så har moduler der tilføjer yderligere funktioner til en klasse og som kan mix/matches med andre moduler, bliver det så ikke noget møg at lave?
Avatar billede Slater Ekspert
04. marts 2019 - 13:24 #7
Jo, det kræver en skarp definition af interfaces, så man ved præcis hvad hver metode modtager og returnerer. Og selv da kan det langt fra bruges til alting. Du kan f.eks. ikke have flere moduler der modificerer samme metode. Lige i tilfælde af f.eks. login, vil det nok give mere mening at registrere services serielt, så alle køres igennem efter hinanden ind til en returnerer true.

Til at modificere mere komplicerede data vil et event-system eller hooks give mere mening - hvor du tilføjer event dispatches til vigtige begivenheder i systemets kerne, og lader moduler håndtere dem og modificere data.

En god plugin-arkitektur er ikke let at lave.
Avatar billede chrisrj Forsker
04. marts 2019 - 13:28 #8
Hmmm...jah...jeg bliver nok ikke færdig inden weekenden - især ikke pga. de 2-3 dagslange møder jeg har... :D
Avatar billede rix Praktikant
04. marts 2019 - 19:08 #9
Et plugin system kan laves på mange måder. Selv hvis man laver en der grundlæggende kan fungere til alle de forskellige tilfælde man kunne tænke sig er det ikke alle.

Jeg har lavet en plugin system som fungere på forskellige metoder.
en event listner der fungere på den måde at den bliver kaldt hver gang der sker noget interessant.
der ud over har den en module loader der fungere på den måde at man kalder en method
$module->load("user.auth" )->run(function($module){
  if($module->auth($_POST["username"], $_POST["password"]))
    return true;
}) ;

På den måde kan man tilpasse det til en hver sitrasion
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester