{"id":1786,"date":"2014-08-23T04:29:30","date_gmt":"2014-08-23T02:29:30","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=1786"},"modified":"2016-03-29T19:00:46","modified_gmt":"2016-03-29T17:00:46","slug":"gestion-des-modules","status":"publish","type":"post","link":"http:\/\/blog.nebule.org\/?p=1786","title":{"rendered":"Gestion des modules"},"content":{"rendered":"<p style=\"text-align: justify;\">La gestion des modules existait au niveau de <a title=\"Projet sylabe\" href=\"www.sylabe.org\" target=\"_blank\">sylabe<\/a>. Elle est ajout\u00e9e directement dans <a title=\"Projet nebule\" href=\"www.nebule.org\" target=\"_blank\">nebule<\/a> en PHP. Ce qui permet de l&rsquo;utiliser \u00e0 la fois dans <em>nebule<\/em> et <em>sylabe<\/em>. Chaque programme peut utiliser ses propres modules.<\/p>\n<p style=\"text-align: justify;\">La programmation orient\u00e9e objet dans PHP permet de g\u00e9rer plus facilement des modules puisque ce sont simplement des classes, une par module, qui respectent des interfaces pr\u00e9cises et non des fonctions multiples par modules. Le m\u00e9canisme de gestion derri\u00e8re consiste \u00e0 recenser les classes qui respectent certains crit\u00e8res et les lister dans un tableau, pr\u00e9-instanci\u00e9es.<\/p>\n<p style=\"text-align: justify;\">La pr\u00e9-instanciation permet d&rsquo;initialiser certains environnements comme un acc\u00e8s \u00e0 une base de donn\u00e9e par exemple.<\/p>\n<p style=\"text-align: justify;\">Il y a deux niveau de gestion en fait.<br \/>\nLe premier se fait au niveau de <em>nebule<\/em>. L&rsquo;instanciation de la classe <code>nebule<\/code> va rechercher tous les objets qui sont d\u00e9finis comme des modules, c&rsquo;est \u00e0 dire avec le bon type et qui sont li\u00e9s uniquement par l&rsquo;entit\u00e9 <a title=\"bachue\" href=\"http:\/\/bachue.nebule.org\" target=\"_blank\">bachue<\/a>. La recherche des modules se fait en mode strict, les autres entit\u00e9s sont ignor\u00e9es sauf les entit\u00e9s marqu\u00e9es comme autorit\u00e9s locales.<br \/>\nLe deuxi\u00e8me niveau, toujours lors de l&rsquo;instanciation de la classe <code>nebule<\/code>, va appeler une classe sp\u00e9cifique par cat\u00e9gorie de modules. Cette classe est dite classe de routage. Pour chaque cat\u00e9gorie de modules, la classe de routage va s&rsquo;occuper de rechercher toutes les classes correspondants \u00e0 des modules ayant la m\u00eame interface.<\/p>\n<p style=\"text-align: justify;\">La classe de routage respecte la m\u00eame interface que les classes des modules concern\u00e9s. Elle seule est d\u00e9finit et reconnu dans l&rsquo;instance <code>nebule<\/code>. Et c&rsquo;est elle qui, \u00e9tant appel\u00e9e, va transmettre les requ\u00eates vers la classe, le module, la plus appropri\u00e9e au traitement. Elle fait donc les r\u00f4les de d\u00e9couverte des modules et de routage vers ces modules. Comme la classe de routage partage la m\u00eame interface, elle a le m\u00eame comportement que celles-ci, ce qui facilite le d\u00e9veloppement.<\/p>\n<p style=\"text-align: justify;\">Il existe actuellement deux classes de routages reconnues : io et social.<br \/>\nLa classe communication a \u00e9t\u00e9 fusionn\u00e9e dans io n&rsquo;existe plus.<\/p>\n<p style=\"text-align: justify;\">Il y a cependant un probl\u00e8me. En int\u00e9grant les IO dans des modules \u00e0 charger, on se coupe l&rsquo;herbe sous les pieds puisque pour charger les modules il faut avoir des IO fonctionnels&#8230; alors que ces IO sont dans les modules que l&rsquo;on veut charger&#8230;<br \/>\nL\u00e0, le <em>bootstrap<\/em> va nous aider puis qu&rsquo;il contiendra la classe d&rsquo;un module IO par d\u00e9faut, les IO sur syst\u00e8me de fichier (FileSystem). Lors du chargement de la librairie <em>nebule<\/em> en php, une nouvelle d\u00e9tection se fera mais sur les modules pr\u00e9sents localement, c&rsquo;est \u00e0 dire sur le syst\u00e8me de fichier.<\/p>\n<p style=\"text-align: justify;\">Ce fonctionnement par d\u00e9faut avec le <em>bootstrap<\/em> entra\u00eene un autre probl\u00e8me. Puisque l&rsquo;on va utiliser le module IO FileSystem par d\u00e9faut, on ne prendra en compte que ce qui y est pr\u00e9sent. Si la libraire charge par d\u00e9faut un autre module IO, par exemple MYSQL, alors les mises \u00e0 jours des objets, et donc des modules, ne seront pas \u00e9crit sur le syst\u00e8me de fichiers, et donc ceux-ci ne seront pas mis \u00e0 jour.<br \/>\nIl faut pr\u00e9voir un m\u00e9canisme de mise \u00e0 jour&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La gestion des modules existait au niveau de sylabe. Elle est ajout\u00e9e directement dans nebule en PHP. Ce qui permet de l&rsquo;utiliser \u00e0 la fois dans nebule et sylabe. Chaque programme peut utiliser ses propres modules. La programmation orient\u00e9e objet dans PHP permet de g\u00e9rer plus facilement des modules puisque ce sont simplement des classes, &hellip; <a href=\"http:\/\/blog.nebule.org\/?p=1786\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Gestion des modules<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,13,16,19,20],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1786"}],"collection":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1786"}],"version-history":[{"count":1,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1786\/revisions"}],"predecessor-version":[{"id":2168,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1786\/revisions\/2168"}],"wp:attachment":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1786"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}