DEV Community

Cover image for Vous aimez Rails et Laravel ? Vous aimerez aussi Adonis.js
 Eric Le Codeur
Eric Le Codeur

Posted on

Vous aimez Rails et Laravel ? Vous aimerez aussi Adonis.js

Si vous désirez plus de contenu francophone comme celui-ci, cliquer Follow ou suivez-moi sur Twitter


Adonis = Framework MVC pour Node.js

Je développe souvent avec Rails et Laravel. J'adore ces framework. Ils sont puissants, stables, rapides et faciles à utiliser. Lorsque vous vous habituez à développer avec un bon framework MVC, il est difficile de revenir en arrière.

Plus tôt cette année, j'ai eu le mandat de développer une application frontend en javascript. Pour accompagner cette application je me suis dit pourquoi ne pas utiliser un backend en javascript aussi. Le but était d'avoir toute mon stack en javascript.

Sur papier, cela semblait facile mais en réalité la tâche était beaucoup plus compliquée que prévu. Je n'ai pas trouvé de framework javascript qui, à mon avis, soit aussi bon que Laravel et Rails. Bon dans le sens de l'efficacité du développement, c'est-à-dire puissant, rapide mais très facile et agréable à travailler.

J'ai essayé 3 frameworks différents et aucun ne correspondait à ce que je cherchais, j'ai donc décidé pour ce projet d'utiliser un backend Laravel.

Récemment, je suis tombé sur un framework qui existait depuis un certain temps, mais pour une raison que je ne connaissais pas, il était passé sous mon radar. Ce framework est Adonis.js

Qu'est-ce qu'Adonis ? En résumé, il s'agit de la version Node.js de Laravel. C'est un framework qui contraste avec les autres frameworks Node.js. Comme Laravel, Adonis a pour mission le bonheur du développeur et aussi pour mandat de fournir tous les outils nécessaires pour mener à bien un projet de A à Z.

Je n'ai pas encore fait de vrai projet en production mais j'ai quand même eu la chance de faire quelques petits projets pour le plaisir et je dois dire que je suis agréablement surpris de voir à quel point Adonis est naturel et facile à utiliser.

Étant un framework MVC tout comme Laravel, la courbe d'apprentissage est beaucoup plus courte.

Voici quelques exemples qui comparent le code Laravel avec le code Adonis.js. Voir les similitudes :
Laravel route

Route::get('/', [PostController::class, 'index']);
Enter fullscreen mode Exit fullscreen mode

Adonis route

Route.get('/', 'PostsController.index')
Enter fullscreen mode Exit fullscreen mode

Laravel migrations

public function up() {
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
        $table->string('title');
        $table->text('content');
    });
}
Enter fullscreen mode Exit fullscreen mode

Adonis migrations

protected tableName = 'posts'
public async up () {
    this.schema.createTable(this.tableName, (table) => {
      table.increments('id')
      table.timestamps(true)
      table.string('title')
      table.text('content')
    })
  }
Enter fullscreen mode Exit fullscreen mode

Laravel controller:

class BlogController extends Controller
{   
    public function index()
    {
        $posts = Post::all();
        return view('posts.index', ['posts', $posts]);
    }
Enter fullscreen mode Exit fullscreen mode

Adonis controller

export default class PostsController {
  public async index (ctx: HttpContextContract) {
    const posts = await Post.all()
    return ctx.view.render('posts/index', {posts})
  }
Enter fullscreen mode Exit fullscreen mode

Laravel view (blade)

@extends('layouts.app')

@section('content')
<h1>Welcome to my Blog</h1>
    @foreach($posts as $post)
      <h3>{{post->id}}. <a href="{{ route('PostsController.show', $post)}}">{{ post->title }}</a></h3> <br>
      {{ post->content }} <br><br><hr>
    @endforeach
@endsection
Enter fullscreen mode Exit fullscreen mode

Adonis view (edge)

@layout('app')

@section('page')
    <h1>Welcome to my Blog</h1>
    @each(post in posts)
      <h3>{{post.id}}. <a href="{{ route('PostsController.show', {id: post.id})}}">{{ post.title }}</a></h3> <br>
      {{ post.content }} <br><br><hr>
    @endeach
@endsection 
Enter fullscreen mode Exit fullscreen mode

Comme vous pouvez le voir, la courbe d'apprentissage est assez faible.

Mais tout n'est pas pareil par exemple. Dans Adonis, le modèle est explicitement déclaré dans le fichier modèle. Dans Laravel, le modèle n'est défini que dans le fichier de migration.

Fichier modèle Adonis :

export default class Post extends BaseModel {
  @column({ isPrimary: true })
  public id: number

  @column.dateTime({ autoCreate: true })
  public createdAt: DateTime

  @column.dateTime({ autoCreate: true, autoUpdate: true })
  public updatedAt: DateTime

  @column()
  public title: string

  @column()
  public content: string

}
Enter fullscreen mode Exit fullscreen mode

Conclusion

C'est tout pour aujourd'hui. Restez à l'écoute car je publierai de nombreux autres articles sur Adonis.js dans un avenir proche.

Top comments (0)