Now create !

OK.... but how ?!

Guillaume FAURE-DUMONT

@guillaume_fd

Business Layer Conception &
DataBase (schema) Design

Sommaire

  • Conception Business Layer
    • Comment réagit l'app
    • => Comment on pense le métier

       
  • Design schema DataBase
    • Ce qu'il faut retenir comme info
      • Qui sont mes clients
      • J'ai quoi en stock
      • Qui a payé quoi
    • Le plus "efficacement" possible !

Business Layer

Penser sa représentation du métier... en code !

  • On veut remplacer l'humain dans notre processus métier 😱
  • Automatiser ce qui peut l'être
  • Représenter les choses évidentes en premier
    • aller dans les détails ensuite

Exemple : ECOLE DE CODE 😈

Elèves

Les différencier

  • Email / Password

Cours

Contenu

  • On sait qu'on va avoir besoin de plus, mais pour l'instant, c'est pas le cas
    • On ne code PAS pour demain !
       
  • On pourrait considérer qu'on a un seul cours
    • Coup du MVP
    • On veut automatiser
      • => On a PLEIN de tout !

Commencer simple

Version simple

C'est fini !  T'as un compte, t'as accès aux cours !

  • On veut rendre le truc plus flexible
    • Accès distincts aux cours

Créer une relation (facultative) entre cours et élèves

  • 🚨☢️⚠️☣️ NOMMAGE !
  •      Easy !!!

Comment nommer le fait qu'un élève ait accès à un cours ?

Inscription

Sous-sujets

Ne pas réinventer la roue !

Certains sujets sont des projets complets à eux seuls

  • Payment
  • Authentication
  • ...
  • Gestion d'images ?
  • Storage en général ?
  • ...
  • Gestion front ?

Continuer à creuser (1/4)

Faire travailler les élèves ensemble

Faire des groupes

  • Elèves ?
  • Inscriptions ?

Comment on les regroupe ?

Plus la user a de libertés,

    plus c'est compliqué à implémenter

Continuer à creuser (2/4)

Faire travailler les élèves ensemble

On lance une promo :

  • Quand on a n élèves prêts à commencer
  • Tous les x jours / mois / pleines lunes

Comment nommer ces groupes ?!

😱

Continuer à creuser (3/4)

Promotions

  • Date de début
  • Liste d'inscriptions
     
  • Un élève n'a accès au cours que si :

    • La promotion a commencé
      • Easy
    • La promo en est à ce jour du cours
      • Gros refacto en vue !

⚠️ L'app va commencer à fonctionner différemment !

LA TECH EST AU SERVICE DU PRODUIT !!

Continuer à creuser (4/4)

😡 T'es relou Guillaume, on le savait déjà !!

On savait qu'on aurait probablement besoin des promo !

La livraison de cette feature aurait probablement retardé la première livraison d'une bonne semaine !

L'important, c'est pas la chute, c'est l'atterrissage

SRP

C'est du coton

  • Etre responsable d'UNE chose
    • C'est déjà pas mal
    • Personne d'autre n'a de droit dessus
    • Pas de MAIS, pas de ET

Exemple e-commerce:
    Ne permettez pas à un User de payer son panier  !

On veut du CRUD

Prendre du recul :D

  • Créer des notions :
    • Elèves / Cours / Inscriptions / Promotions
  • Faire les opérations du métier :
    • Créer et modifier des instances !

ℹ️ Même les sessions Devise sont une ressource CRUD

🐢 TOUT EST CRUD ! 🐘

DataBase (schema) design

Ce flim n'est pas un flim sur le cyclimse

ATTENTION

DataBase (schema) design

  • Pas de répétition de données
    • Sauf si ... on en a besoin !
    • Ha oui, et aussi ... les refs !
       
  • Pas de données orphelines
    • Sauf si...
       
  • Accéder à la donnée efficacement
    • PAS DE D'EXCEPTION !!

On veut agencer les notions entre elles

DataBase (schema) design

Contraintes

  • Infra
  • Prix
  • Volumétries
  • Requêtage complexe
    • GEO
    • JSON
    • DOC
    • ...?

Le SGBD n'est PAS un sujet !

DataBase (schema) design

Enfin si, mais bon...

Le langage SQL n'est PAS un sujet !

C'est LE langage pour parler avec un SGBD

  • Très puissant
  • Très limité
  • Travailler intelligemment !

Rails est super-balèze pour parler SQL

(au début...)

DataBase (schema) design

Avoir un schéma en étoile

  • C'est ce qu'il te faut... en théorie
  • On travaille souvent sur 2 ou 3 entités centrales
  • L'appli évolue... ton schéma aussi !
  • Limiter les liens raccourcis
    • Ton SGBD est plus fort que toi
    • Et Rails le sait 😘

DataBase (schema) design

🙏🏻 Le sacro-saint INDEX 🙏🏻

  • Une référence (unique ?) pour chaque chose
    • Cours (inutile ?)
    • Subscription (indispensable ?)
    • User (la clef est ... ?)
  • Index "composite"
     
  • Attention
    • L'ordre compte (beaucoup)
    • Un index peu en flinguer un autre
      • Surtout en écriture

DataBase (schema) design

La DB se suffit à elle-même

  • Tout votre business est dans votre DB
  • Tout protéger au maximum
    • Colonnes non-vides
      • Oui, ton modèle fait déjà le taf
      • Je m'en fous, protège quand-même
    • Tailles des string
    • Bons types de données
  • Votre Data a du sens sans votre BL

Ba maintenant, elle va marcher beaucoup moins bien, forcement

REFACTO

  • Penser son archi comme quelque chose de vivant
     
  • Vous allez plus perdre
    • De temps à le lire ...
      • (pour le refacto)
    • ...que de temps CPU !
       
  • LISIBILITE !
    • Par votre codeur le plus junior

We got a winner

Q & A

Guillaume FAURE-DUMONT

@guillaume_fd

C'est quoi les REFS ?   =>  5

Conception @ THP

By Guillaume Faure-Dumont