04. marts 2019 - 11:53Der 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?? :)
Med observability og tæt samarbejde sikrer Fibia og Novataris stabilitet og fejlfrie systemer døgnet rundt
9. december 2024
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.
?
Synes godt om
1 synes godt om dette
Slettet bruger
04. marts 2019 - 12:23#2
så det du skal kode er noget som importerer plugin navnet, og aktiverer med variabler
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... :-/
Synes godt om
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.
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.
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?
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.
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
Synes godt om
Ny brugerNybegynder
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.