Skip to content

Architecture

Slab n'est pas une application monolithique : c'est une pile de packages Composer, chacun avec une responsabilité nette, assemblés par une application skeleton mince.

La pile

       apps skeleton (slab/slab, apisell/apisell)
                      ▲  require
   ┌──────────────────┴───────────────────────────┐
   │  apisell/framework      (couche B2B, option)  │
   ├───────────────────────────────────────────────┤
   │  slab/promotion · slab/payment · slab/carrier  │  ← features (packages)
   │  slab/frontend          (tout le front)        │
   ├───────────────────────────────────────────────┤
   │  slab/framework         (le cœur : domaine)    │
   └───────────────────────────────────────────────┘
PackageRôle
slab/frameworkLe cœur : domaine e-commerce (catalogue, panier, commande, taxe, pricing) + back-office + tous les points d'extension. Vendor fermé à l'édition.
slab/frontendTout le front : contrôleurs, routes front.*, vues, view-models, assets, tunnel de commande. Remplaçable.
slab/promotion, slab/payment, slab/carrierFeatures optionnelles, packagées. Chacune s'enregistre seule et contribue au cœur via les contrats.
apisell/frameworkLa couche B2B (grilles tarifaires, devis, comptes entreprise), bâtie au-dessus du cœur.

Un seul sens de dépendance

Le cœur ne connaît aucun package : il ne référence jamais Promotion, Carrier ni PaymentMethod. Les features se greffent depuis l'extérieur (registres, relations dynamiques). Le frontend ne connaît aucune feature : il lit des données agrégées par le cœur et les rend.

Le skeleton : une application mince

Une boutique Slab est un projet Laravel minimal qui require les packages voulus. Son app/ est quasi vide : le code vit dans les vendors. Le skeleton ne porte que :

  • la configuration d'infrastructure (base de données, queue, recherche…) ;
  • le sur-mesure propre au client (dans la couche app, qui garde les mises à jour du cœur — ce n'est plus un fork) ;
  • éventuellement un thème projet.

Installer une feature = composer require le package. Son service provider est auto-découvert, il enregistre ses contributions, et la feature est active. Aucun flag.

Où va mon code ?

Vous écrivez……ici
une feature réutilisableun package (recette)
du sur-mesure projetla couche app du skeleton
une refonte de présentationun thème (recette)
une surcharge ponctuelle de vueresources/views/vendor/… du skeleton

Distribution

Les packages slab/* et apisell/* sont publiés sur un registre Composer privé (Satis, composer.stafe.fr). Une application se monte par composer create-project du skeleton, puis évolue par composer require des features.