X

CRUDdy By Design par Adam Wathan : Résumé, Exemples, Opinions


En 2017, Adam Wathan a fait une excellente conférence à Laracon intitulée CRUDdy By Design, qui a été recommandée et repartagée en ligne pendant des années. J’ai décidé de le résumer sous forme de texte, donc au lieu de regarder les 40 minutes, vous pourriez lire ceci plus rapidement, également avec plus d’exemples et ma propre opinion.

Tout d’abord, je recommande quand même de regarder la vidéo complète, intégrée ci-dessous.


Considérons cet article comme un “résumé compact”, mais si vous voulez la version complète avec des détails, ces 40 minutes en valent toujours la peine.

Et avant de demander : oui, cette vidéo date de 2017. Et oui, elle est toujours extrêmement pertinente, malgré quelques petits changements de syntaxe.


Le point principal : tout est CRUD

Venons-en directement au point principal du discours d’Adam.

Au lieu de créer des méthodes personnalisées sans ressources dans les contrôleurs, vous devez créer de nouveaux contrôleurs séparés avec des méthodes ingénieuses.

Un exemple typique serait un PodcastController qui a des méthodes typiques comme index(), store()et d’autres, et vous souhaitez ajouter une nouvelle méthode subscribe().

Le problème avec le subscribe() méthode est qu’il s’agit d’un coutume action : en ajoutant ceux-ci, ces contrôleurs peuvent rapidement devenir trop volumineux et devenir difficiles à lire/maintenir.

Au lieu de cela, selon Adam, vous devriez créer un SubscriptionController ou PodcastSubscriptionController avec la méthode store().

Si nous limitons chaque Contrôleur à seul Méthodes CRUDdy, c’est plus facile à entretenir.

Les méthodes CRUDdy sont les mêmes que celles de Route::resource() dans les contrôleurs de ressources :

  • indice()
  • créer()
  • magasin()
  • montrer()
  • modifier()
  • mise à jour()
  • détruire()

En d’autres termes, si vous souhaitez créer une méthode qui ne figure pas dans la liste ci-dessus, il y a une chance de mieux créer un nouveau contrôleur séparé avec l’une de ces méthodes ci-dessus, en pensant à laquelle de ces 7 méthodes convient le mieux.

Ou, encore plus court, chaque contrôleur doit être un contrôleur de ressources.

Répéter la même chose dans les mots d’Adam : Ne jamais écrire d’actions personnalisées.


Trois exemples tirés du discours d’Adam

Avis: Je vais reformuler/résumer un peu les exemples, et je n’irai pas à 100 % avec la vidéo.


Exemple 1. Contrôleurs de ressources imbriqués

Jetons un œil à cet exemple :

1class PodcastController extends Controller {

2 public function index() { /* ... */ }

3 

4 public function create() { /* ... */ }

5 

6 // ...

7 

8 public function listEpisodes($id) {

9 // list episodes of a specific podcast

10 }

11}

Ensuite, dans les Routes…