Maison >développement back-end >tutoriel php >Utilisez le trait PHP DTO pour obtenir la réutilisabilité et l'évolutivité de l'interaction des données

Utilisez le trait PHP DTO pour obtenir la réutilisabilité et l'évolutivité de l'interaction des données

PHPz
PHPzoriginal
2023-10-12 13:57:111467parcourir

使用PHP trait DTO实现数据交互的可复用性与可扩展性

Utilisez le trait PHP DTO pour obtenir la réutilisabilité et l'évolutivité de l'interaction des données

Dans la programmation orientée objet, l'objet de transfert de données (DTO) est un modèle de conception utilisé pour transférer des données entre différentes couches. DTO peut être utilisé pour convertir des données entre différentes couches afin de répondre aux besoins de différentes couches, améliorant ainsi l'évolutivité et la réutilisabilité du code. En PHP, vous pouvez utiliser des traits pour implémenter les fonctions de DTO.

Tout d’abord, comprenons ce que sont les traits. Trait est un mécanisme introduit dans PHP5.4 qui permet aux développeurs de réutiliser des ensembles de méthodes entre différentes classes, similaire à l'héritage multiple. L'utilisation de traits peut éviter les restrictions d'héritage unique de PHP et combiner le code de manière plus flexible. Ensuite, nous utiliserons des traits pour implémenter un simple DTO.

Tout d'abord, nous définissons une classe DTO de base nommée BaseDTO. Cette classe contient deux propriétés communes : $data et $mapping. $data est un tableau qui stocke les données et $mapping est un tableau associatif qui spécifie le nom de clé de chaque attribut du tableau $data. Nous définissons un constructeur commun dans BaseDTO, qui recevra un tableau associatif en tant que paramètre et copiera les paires clé-valeur du tableau dans le tableau $data.

Voici le code de BaseDTO :

class BaseDTO {
    protected $data;
    protected $mapping;

    public function __construct(array $data = array()) {
        $this->data = array();
        $this->mapping = array();

        foreach ($data as $key => $value) {
            if (isset($this->mapping[$key])) {
                $this->data[$this->mapping[$key]] = $value;
            }
        }
    }

    public function toArray() {
        return $this->data;
    }

    public function __get($name) {
        if (isset($this->mapping[$name])) {
            return $this->data[$this->mapping[$name]];
        }

        return null;
    }

    public function __set($name, $value) {
        if (isset($this->mapping[$name])) {
            $this->data[$this->mapping[$name]] = $value;
        }
    }
}

Ensuite, nous pouvons définir des classes DTO spécifiques, telles que UserDTO. UserDTO hérite de BaseDTO et utilise des traits pour réutiliser certaines méthodes courantes. Dans UserDTO, nous définissons certaines propriétés et spécifions la relation entre les propriétés et le mappage dans le constructeur.

Voici le code de UserDTO :

require_once 'BaseDTO.php';

trait UserDTO
{
    public function getId()
    {
        return $this->id;
    }

    public function getName()
    {
        return $this->name;
    }
    
    public function getEmail()
    {
        return $this->email;
    }
}

class User extends BaseDTO
{
    use UserDTO;

    protected $id;
    protected $name;
    protected $email;

    protected $mapping = [
        'id' => 'id',
        'name' => 'name',
        'email' => 'email',
    ];
}

Après avoir utilisé le trait UserDTO, la classe User peut directement appeler des méthodes telles que getId(), getName() et getEmail(), qui renverront les valeurs d'attribut correspondantes. Dans le même temps, la classe User hérite également des méthodes toArray(), __get() et __set() de BaseDTO, ce qui permet à la classe User de posséder les fonctions de BaseDTO.

En utilisant les classes DTO, nous pouvons transmettre des données entre différentes couches telles que la logique métier, l'accès aux données, les vues, etc. Dans la couche d'accès aux données, les résultats des requêtes de base de données peuvent être mappés aux objets DTO. Dans la couche de logique métier, les objets DTO peuvent être utilisés pour les opérations de données et le traitement métier. Au niveau de la couche de vue, les objets DTO peuvent être convertis en structures de données qui doivent être affichées.

Utilisez des traits pour implémenter les fonctions DTO, rendant le code plus flexible, évolutif et réutilisable. En définissant différentes classes et caractéristiques DTO, nous pouvons combiner de manière flexible les codes en fonction des besoins de l'entreprise pour parvenir à un développement plus efficace.

Pour résumer, l'utilisation du trait PHP DTO peut améliorer la réutilisabilité et l'évolutivité du code. En définissant des classes DTO de base et en utilisant des traits pour réutiliser des méthodes courantes, nous pouvons facilement transférer des données entre différentes couches et les développer et les personnaliser de manière flexible en fonction des besoins de l'entreprise. Ce modèle de conception peut nous aider à mieux organiser et gérer le code et à améliorer l'efficacité du développement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn