Comment créer un module métier ?

Pré-requis

Un module métier définit une règle métier ou un traitement métier. Il a généralement besoin d'accéder à une source (base) de données, et dans ce cas les pré-requis pour ce tutoriel sont :

  1. installation et configuration d'une base de données MySQL/MariaDB ;
  2. génération des DAO.

Un module métier ou BO (Business Object) est l'équivalent d'un contrôleur (Controller) pour les habitués des frameworks basés sur le MVC (Model-View-Controller). Bien que le framework Adventy soit conçu sur l'architecture MVA (Model-View-Aspect), l'appel des méthodes d'action (suffixées par Action) ne change pas. Il n'y a que le terme "Controller" qui a changé en "Aspect". Nous verrons dans un autre tutoriel, comment faire de l'AOP.

Création d'un BO

Le dossier racine des BO est : ./application/model/bo/

Pour la création de notre premier BO, nous allons créer un simple traitement qui va sommer une liste d'entiers, dont la règle métier sera la suivante :

  1. le nombre d'entiers dans la liste est aléatoire, mais doit être compris entre 3 et 6 entiers ;
  2. chaque entier de la liste est aussi aléatoire, et doit être compris entre 0 et 10 ;
  3. l'affichage du calcul sera sous la forme : I1 + I2 + ... + In = Total

Créons notre class BO :

  1. copier/coller le fichier BO modèle ./application/model/bo/_SampleBo.class.php ;
  2. renommer la copie en ./application/model/bo/IndexBo.class.php ;
  3. éditer ce nouveau fichier, puis le modifier comme suit :
    <?php 
    namespace model\bo;
    
    /**
     * Index class.
     * @author Vincent SOYSOUVANH
     * @version 0.1
     * @package model.bo
     */
    class IndexBo extends \org\adventy\model\bo\AbstractBo {
    
    }
    ?>
  4. ajouter la méthode d'action randomSum avec le suffixe Action :
    /**
     * Display sum of random integers list.
     * This action does not use DAO.
     * 
     * @return void
     */
    public function randomSumAction() {
    	//Define random number of integers to sum: minimum 3 integers to 6 maximum
    	$n = rand(3, 6);
    
    	//Build random integers list
    	$integers = [];
    	for($i = 0; $i < $n; $i++) {
    		//Add integer to sum, between 0 to 10
    		$integers[] = rand(0, 10);
    	}
    
    	//Set view data
    	$this->integers = $integers;
    	$this->result = array_sum($integers);
    }
    

Pour afficher le résultat du calcul, la méthode randomSumAction communique à la vue la liste des entiers ainsi que le résultat à afficher en créant les variables membres de portée publique de la façon suivante :

  1. liste des entiers : $this->integers = $integers;
  2. résultat du calcul : $this->result = array_sum($integers);

Création de la vue

Le dossier racine des vues de type page est : ./application/view/page/

Pour créer la vue associée à la méthode d'action randomSumAction :

  1. copier/coller le fichier vue modèle ./application/view/page/_sample.body.php ;
  2. renommer la copie en ./application/view/page/random-sum.body.php ;
  3. éditer ce nouveau fichier, puis le modifier comme suit :
    <h1>Sum random integers list</h1>
    <section>
    	<h2>Result</h2>
    	<p><?= implode(' + ', $this->integers)?> = <b><?= $this->result?></b></p>
    	<p>Refresh for a new sum.</p>
    </section>

La récupération des données envoyées par la méthode d'action randomSumAction se fait de la même manière que leur affectation. Cela signifie que toutes les variables utilisées dans la vue de la forme $this->xxx, ont été créées dans la méthode d'action suivant l'affectation $this->xxx = ...;

En lançant la page http://aftutorial.loc/random-sum, nous devrions obtenir le résultat suivant :