Pourquoi utiliser une interface ?

a marqué ce sujet comme résolu.

Bonjour,
Voici un exemple dans Laravel 5 pour que vous voyez de quoi je parle. Avant, je mettait tout le traitement dans mes contrôleurs, ça fonctionnait mais ce n’était pas pratique car je me répétait souvent entre les contrôleurs. Je me suis donc renseigné sur les injections de dépendances et effectivement, c’est la bonne solution. J’ai ainsi juste a créer une classe qui contient toutes les méthodes pour le traitement de mes données, de la réclamer en paramètre des méthodes du contrôleur et Laravel se débrouille pour instancier le tout. Et effectivement ça fonctionne super bien.

Seulement, on me dit après qu’il vaut mieux faire une interface que notre classe de traitement implémente et appeler cette interface dans les paramètres des méthodes du contrôleur. Pourquoi ? Quel est l’intérêt de rajouter une interface à part masquer le code et créer un fichier supplémentaire ?

Merci pour vos explications !

+0 -0

Ce que tu crées pour rassembler la logique de consultation de données s’appelle un Repository, ce qui se passe quand tu le mets en paramètre de ton constructeur s’appelle l’injection de dépendance. Maintenant que tu connais ces termes et que tu t’es un peu renseigné, je vais répondre à ta question.

Le principe que tu énonces maintenant est l’inversion de controle, très rapidement, ça te permet d’avoir plusieurs implémentations pour une même interface et que ça fonctionne, sans que tu ne saches laquelle va être utiliser. Exemple concret.

Tu as une interface ICommunication qui définit une méthode sendMessage. Tu auras ensuite 3 classes tels que : SMSCommunication, EmailCommunication, TwitterCommunication. Ces 3 classes vont implémenter l’interface ICommunication, tu pourras donc, dans ta classe, dire que tu attends une classe respectant l’interface ICommunication, envoyer un message, et selon tes besoins, instancier telle ou telle implémentation de la classe.

Merci pour le vocabulaire, je connaissais le terme repository mais j’étais pas sûr que c’était le terme officiel. :)

D’accord, je comprend le principe et il est totalement génial !
Dans ton exemple avec l’interface ICommunication, je commence par lier l’interface avec les classes :

app\Providers\AppServiceProvider.php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php

public function register()
{
    $this->app->bind(
        'App\Repositories\ICommunication', 
        'App\Repositories\SMSCommunication'
    );

    $this->app->bind(
        'App\Repositories\ICommunication', 
        'App\Repositories\EmailCommunication'
    );

    $this->app->bind(
        'App\Repositories\ICommunication', 
        'App\Repositories\TwitterCommunication'
    );
}

Et ensuite, comment faire comprendre à Laravel que je souhaite utiliser Twitter, Email ou SMS ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte