Les Objets de Données (DTO)
La couche Data regroupe des objets simples, souvent appelés DTO (Data Transfer Objects). Leur rôle est de transporter des données structurées et typées d'un point A (un Mapper ou un Repository) à un point B (un template Blade), sans porter de logique métier complexe.
Concept et utilité
Contrairement aux tableaux associatifs natifs de PHP ou de WordPress, les objets Data offrent :
- Contrat de données strict : Vous savez exactement quelles propriétés sont disponibles (ex:
$data->titleexistera toujours). - Auto-complétion : Votre IDE reconnaît les propriétés, ce qui réduit les erreurs de frappe et accélère le développement.
- Immuabilité : En utilisant la propriété
readonly(PHP 8.2+), vous garantissez que la donnée ne sera pas modifiée accidentellement entre sa récupération et son affichage. - Typage fort : Chaque propriété possède un type défini (string, int, ou même un autre objet comme
Image), ce qui sécurise le rendu dans Blade.
Structure d'une classe Data
Ces classes sont volontairement légères. Elles utilisent généralement la promotion de propriété dans le constructeur pour rester concises.
php
namespace App\View\Data;
use App\Support\Types\Image;
use App\Support\Types\Link;
readonly class ExampleData
{
public function __construct(
public string $title,
public string $content,
public Image $image, // Utilisation d'objets de support typés
public Link $link,
) {}
}Intégration dans le flux de travail
Les objets de données sont le point final de la préparation des données. Ils font le lien entre la logique technique et l'interface utilisateur.
Utilisation dans Blade
Grâce à cette structure, le code dans vos templates devient extrêmement propre et facile à lire :
bladehtml
<div class="card">
@if($card->image->url)
<img src="{{ $card->image->url }}" alt="{{ $card->image->alt }}">
@endif
<h3>{{ $card->title }}</h3>
<p>{{ $card->excerpt }}</p>
<a href="{{ $card->button->url }}" target="{{ $card->button->target }}">
{{ $card->button->title }}
</a>
</div>Comparaison : Tableau vs Objet Data
| Caractéristique | Tableau Associatif ($data['title']) | Objet Data ($data->title) |
|---|---|---|
| Typage | Faible (mixte) | Fort et explicite |
| Erreurs | undefined index silencieux ou fatal | Erreur de type immédiate et claire |
| Lisibilité | Difficile à deviner sans var_dump | Documentation par le code (IDE) |
| Sécurité | Modifiable n'importe où | Immuable (readonly) |
Recommandations
- Utilisation de Types Support : Pour des éléments récurrents comme les images ou les liens, utilisez des types de support (
App\Support\Types\Image) au sein de vos DTO pour uniformiser la manipulation des médias WordPress. - Pas de méthodes complexes : Si vous avez besoin de transformer la donnée (ex: formater une date), faites-le dans le Mapper avant de remplir l'objet Data. L'objet Data ne doit faire qu'exposer la donnée finale.