Re : Application ?

Bonjour,

Si on me demande mon avis, je dirais +1 pour Malian(bon je suis aussi Fan de ZF).

J'aime aussi configuré mon appli dans un fichier type Bootstrap.

12

Re : Application ?

Hey smile,

Comme promis, je réponds à vos questions.
Pendant longtemps, ce projet de Hoa\Application m'a trotté dans la tête, je dois l'avouer. Mais comme Hoa\Controller est devenu très simple et plutôt bien découplé, j'ai décidé de l'arrêter. Toutefois, vos interrogations me refont réfléchir. Je détaille vos suggestions.

Malian :

Tout d'abord félicitation pour cette première béta en version 1 !

j'ai envie de passer à Hoa aussi que je trouve bien mieux foutu que le zf

Merci merci smile. Ça fait plaisir !

Malian :

pour le moment je vois toujours hoa comme un ensemble de librairies bien ficelées entre elles mais pas encore comme un framework qu'on pourrait prendre un main très rapidement !

Je ne peux pas te contredire en partie.
Hoa est effectivement un ensemble de bibliothèques harmonisées comme on le sait tous. Mais la présence de la partie Data « transforme » les bibliothèques en partie en framework car elle permet une forme d'automatisation et externalise certaines choses comme les configurations. On va voir dans quelle mesure.

Malian :

on doit instancier pas mal de composants !

Oui exactement. C'est l'objectif et une des conséquences de la modularité, à savoir imbriquer nos briques logiciels.

Malian :

Ma question est de savoir si tu comptes faire une libraire comme avec le ZF par exemple qui sert à mettre en place une application ...
Je n'aime pas comparer ces deux frameworks mais un des atouts majeurs du ZF c'est justement ce composant application qui permet de mettre une architecture directement en place et je n'ai qu'a faire un petit

Là est toute la question. Sauf que ce composant Zend_Application n'offre pas toute la modularité que je propose avec Hoa. En fait, on va se restreindre. Zend ne fait que de l'HTML et ne vise que du Web. Hoa vise toutes les plateformes et pas seulement du Web. C'est pour ça qu'on doit préciser l'interpréteur de XYL par exemple.
Mais j'ai la solution à ton problème je pense wink.

Pour donner un exemple des configurations externalisées, les règles du routeur peuvent être ceci (dans Data/Etc/Configuration/HoaControllerRouter.json) :

{
    /**
     * Keywords.
     */
    "keywords": {},

    /**
     * Parameters.
     */
    "parameters": {
        "base"    : "/",
        "rewrited": false,
        "rules"   : [
           ["h", "p(?<id>\d+)-(?<title>.*)", "index", "picture"],
           ["g", "(?<all>.*)", "index", index"]
        ]
    }
}

Et c'est tout bon (il faut re-générer les caches, opérations cassées dans la 1.0.0b1 volontairement, ça va revenir). Tu réduis donc ton index.php à :

<?php

require __DIR__ . '/../../Framework/Core/Core.php';

from('Hoa')
-> import('Controller.Dispatcher.Basic')
-> import('Controller.Router');

$router     = new Hoa\Controller\Router();
$dispatcher = new Hoa\Controller\Dispatcher\Basic();
$dispatcher->dispatch($router);

Mais je comprends que ça ne résoud pas le problème que tu as. Tu veux aller plus loin.

Soit.

La solution à tout ça ?

Facile. Pourquoi ne pas faire un module Hoathis ? Je viens de t'en faire un pour que tu vois. Dans Framework/Module/, tu vas crééer Application/Application.php pour avoir ceci :

Framework/
|-- Module/
|   |-- Application/
|   |   |-- Application.php

Le contenu de Application.php sera le suivant (par exemple) :

<?php

namespace {

from('Hoa')
-> import('Controller.Dispatcher.Basic')
-> import('Controller.Router')
-> import('Xyl.~')
-> import('File.Read')
-> import('Http.Response');

}

namespace Hoathis\Application {

class Application {

    protected $_interpreter = null;
    protected $_router      = null;
    protected $_dispatcher  = null;

    public function __construct ( $interpreter = 'html', $rewrited = false ) {

        $this->_interpreter = ucfirst(strtolower($interpreter));
        $this->_router      = new \Hoa\Controller\Router();
        $this->_router->setParameter('rewrited', $rewrited);
        $this->_dispatcher  = new \Hoa\Controller\Dispatcher\Basic();

        return;
    }

    public function dispatch ( ) {

        return $this->_dispatcher->dispatch(
            $this->_router,
            new \Hoa\Xyl(
                new \Hoa\File\Read('hoa://Application/View/Main.xyl'),
                new \Hoa\Http\Response(),
                dnew('Hoa\Xyl\Interpreter\\' . $this->_interpreter)
            )
        );
    }
}

}

Très simple pour l'instant ! Notons dnew(). Modifions maintenant ton Application/Public/index.php, il aura cette tête là :

<?php

require __DIR__ . '/../../Framework/Core/Core.php';

from('Hoathis')
-> import('Application.~');

$application = new Hoathis\Application();
$application->dispatch();

Et voilà le travail. En modifiant les configurations de \Hoa\Controller\Router, on pourra modifier le comportement de \Hoathis\Application facilement, et on peut même lui créer des configurations (pour externaliser l'interpréteur par exemple) ! Tu vois l'idée ? Et là, tu auras l'équivalent de Zend_Application (ou un début).


Ecureuil Virtuel :

Tu n'as pas très bien compris Hoa toi ^^

Je ne sais pas comment Malian l'a perçu, mais je l'aurais presque mal pris wink. Il utilise Hoa depuis moins longtemps que toi et c'est normal qu'il n'en sache pas autant que toi smile. Et tu l'as bien souligné :

[…] en ce moment c'est très dur pour hoa car il a une très grosse restructuration et la doc est en cours.

Ça n'arrange rien !

Je tiens à rectifier certaines choses que tu as dites par contre (rien de méchant, mais il faut tenir un discours clair smile) :

Dans le dossier Application (ou Applications si tu souhaite intégrer plusieurs application au sein de hoa qui comporteront de même classes métiers ou librairies communes) tu auras les dossiers : Controler, Model, View, Public

Dans le dossier Public se trouve ton fichier bootstrap (index.php)
C'est la que va comporter le routage de Hoa (architecture applicative)

Le dossier Application, tout comme le dossier Data, et même Framework, sont des noms conventionnels. Rien ne t'oblige à les appeler comme ça ! Grâce à hoa://, tu peux y accéder dans ton code en conservant une convention de nommage des dossiers, mais comme ce sont des liens symboliques, tu peux les nommer comme tu veux. Donc le pluriel sur Application ou Applications ne changera rien. Tu avais utilisé cette convention par le passé car tu voulais gérer plusieurs applications. C'était une excellente idée, mais rien ne t'oblige à toutes les mettre dans le même dossier, tu me suis ? Tu peux très bien créer un composant hoa://Applications/App1 ou hoa://Applications/App2 etc., ça ne changera pas grand chose, tu t'organises comme tu veux, du moment que c'est clair pour toi smile.

Pareil pour le dossier Public, il ne se trouve pas forcément dans Application et ne s'appelle pas forcément Public. Ce serait un peu étrange, je te l'accorde, mais rien ne t'y oblige ! Ce ne sont que des conventions, mais en aucun cas Hoa impose une quelconque architecture (on est dans des bibliothèques que diable smile).

En revanche, je te rejoins à propos du rendu de la vue. Le rendu n'est pas automatique, mais peut-être que je pourrais ajouter ça à \Hoa\Controller\Dispatcher\Basic, ce n'est pas une si mauvaise idée. En revanche, pour l'utilisation dynamique de définitions XYL, je ne peux pas automatiser car ce n'est pas quelque chose que l'on ferait systématiquement. On peut très utiliser des overlay ou ne rien faire du tout. On peut avoir des actions silencieuses qui appellent d'autres actions.

Ecureuil Virtuel :

Le commencement est très très dur ! Je te l'avoue ! Mais une fois que c'est partie Hoa c'est trop beau !!

Très très dur, faut pas exagérer tongue.


MaitrePylos :

Hoa est à PHP, ce que Rails est à Ruby (celle-là je l'aime bien, tu me contredis hein Hywan !).

Je l'aime bien aussi tiens wink. C'est un peu mon objectif dans l'idée, bien trouvé ! Je pense que c'est ce qu'a voulu exprimer Ecureuil Virtuel également.


Malian, le retour :

Ma question était de savoir si Hywan prévoyait de faire une librairie Hoa pour faire de Hoa un framework full-stack !

Pourquoi pas, mais ce serait en module Hoathis. Vous pouvez même être les mainteneurs de cette bibliothèques et elle pourrait être officielle (c'est à dire livrée conjointement avec Hoa).

Malian :

Je connais Hoa et encore mieux le ZF

J'ai besoin de ce genre de retour aussi pour réussir à me situer. On m'a reproché ces derniers temps d'être trop en décalage par rapport à ce qui existe. C'est positif et négatif à la fois. Il faut réussir à assurer une transition et rassurer les nouveaux venus qui utilisent déjà Zend Framework ou Symfony. Donc tes remarques m'intéressent.

Malian :

Pour moi une application c'est mon projet dans son entièreté.

C'est exact, sauf qu'on a aussi Data dans Hoa, c'est une petite subtilité. Mais Data peut être rangé dans Application …

Malian :

NON, il n'y a pas 1 dossier Controler/Model/View/Public !

Oui, on peut faire ce que tu proposes dans ton architecture avec Hoa. Il faut modifier le paramètre synchronous.file (ou asynchronous.file) de \Hoa\Controller\Dispatcher. Tu peux donner comme valeur

hoa://Application/modules/(:controller:l:)/controllers/…

et le tour est joué (je reprends les mêmes termes que tu as donné en exemple). Et pour arriver à ce résultat, ça se fait en deux coups de cuillière à pot !

Malian :

Pourquoi une tel demande ? Parce que honnêtement j'ai pas envie de devoir faire moi même une classe qui se charge de charger les configurations pour mon modules, d'initialiser mon module, de faire le bon rendu de la vue, d'intégréer mes fichiers CSS/IMG/JS qui sont en dehors du répertoire public dans le répertoire accessible depuis le navigateur !

Sauf que tu peux développer tes bibliothèques Hoathis à deux niveaux : dans Framework ou dans Data. Si tu le fais dans Framework, toutes tes applications en bénéficieront, si tu le fais dans Data, seule ton application courante en bénéficiera. Tu vois l'idée ? C'est pour ça que je te l'ai mis dans Framework/Module/, comme ça tu n'auras plus à la développer. Est-ce un moyen terme ?
De plus, si ça passe en bibliothèque Hoathis standard, tu n'auras même plus à la développer. Mais je pense que les besoins de chacun sont différents, ça mérite donc réflexion smile.

Malian :

Zend le propose, symfony le fait par défaut pourquoi pas Hoa ?

Pour la beauté du geste répondrai que Hoa n'est ni Zend Framework ni Symfony et que je n'ai pas l'intention de les copier parce qu'ils sont leaders. Mon but n'était pas de faire du full-stack au début mais de permettre d'en faire. C'est à ça que Hoathis peut être utile également.

Malian :

@MaitrePylos: Oui je sus trop ZF mais je travail exclusivement avec ZF parce que j'aime sa liberté (c'est pourquoi j'aime Hoa aussi !) mais pour moi il est loin d'être parfait ! Il a de bonnes idées (Zend_Application ?) mais mal implémentée ou pas très intuitive, c'est là que Hoa se démarque pour moi !

Tu peux détailler s'il te plaît ?

Malian :

@Ecureil Virtuel: Tu trouves que la prise en main de Hoa est difficile ? Personnellement je ne trouve pas du tout ! Ce qui est difficile avec un framework tel que Hoa (ou zend encore...) c'est les bonnes pratiques ! Mais ça pour moi c'est dû à la liberté que Hoa offre !

Tu as rencontré des difficultés sur quelle partie exactement ?

Malian :

Je vois maintenant le pavé que j'ai écris et je vais essayé de résumer les choses !

Je n'ose pas relire ma réponse …

Malian :

Avant de signé je veux déjà répondre à ceux qui me diront que Hoa est différent de Zend ou symfony. Je leurs répondrais que je compare parce que c'est mes références et que c'est aussi une des références mondiales en terme de framework PHP ! Je pense que la comparaison, même si j'aime pas faire ça, est quelque chose de très positif parce qu'on peut prendre les points fort d'un coté et ne pas répéter les erreurs ! Moi j'aime le composant Zend_Application ! Je le dis haut et fort ! Et j'aimerais que Hoa intègre quelque chose du même genre ! En mieux si possible mais ça je sais que Hywan le ferra big_smile

Je supporte tout à fait la comparaison tant que c'est utile et constructif. Je ne vois pas pourquoi Zend Framework ou Symfony seraient des concurrents. Jelix ne l'est pas du tout et on échange souvent nos idées, problèmes, solutions etc. Et je ne joue pas dans la même catégorie qu'eux. Ils sont orientés full-stack, je suis orienté bibliothèques.


Ecureuil Virtuel :

Whaoooooooo l'architecture de malade je vois une architecture je fuis !!!!

Peut-être qu'elle est impressionnante mais elle se justifie. Et il faut que Hoa puisse le faire. Si mes principes sont bons, ça devrait être envisageable et faisable. Si c'est le cas, j'ai gagné et on a un truc encore plus modulaire et universel (abstrait quoi). C'est l'objectif smile.
Mais j'avoue que ça me fait peur aussi tongue.


Maitre Pylos, le retour :

Si on me demande mon avis, je dirais +1 pour Malian(bon je suis aussi Fan de ZF).

J'aime aussi configuré mon appli dans un fichier type Bootstrap.

Tous les avis comptes. Et j'ai reçu le message. Est-ce que ma solution te convient également ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Application ?

You're free to build what you want ! Nothing is impossible ! Just do it !

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant