Modello multilingue in DDD

2

Sto lavorando a un progetto, usiamo DDD e ora vogliamo implementare la localizzazione per alcuni campi.

Esempio:

<?php

class Product 
{
    private $id;
    private $name;

    public function __construct($id, $name)
    {
        $this->id = $id;
        $this->name = $name;
    }   
}

Ho un servizio per creare questo prodotto:

Esempio:

<?php 

class CreateProductService
{
    private $productRepository;

    public function __construct($productRepository)
    {
        $this->productRepository = $productRepository;
    }

    public function execute(CreateProductRequest $request)
    {
        $product = new Product(
            $request->getId(),
            $request->getName(),
        );

        $this->productRepository->create($product);
    }
}

Quindi ora voglio cambiare la richiesta DTO per ottenere i nomi invece del nome perché dal modulo ora ho questi:

$names = [
    'es' => 'Name in spanish',
    'en' => 'Name in english',
    ...
]

Qual è l'approccio migliore per raggiungere questo obiettivo?

Ho letto su Internet che non è una buona pratica avere nel modello Product una serie di nomi, quindi cosa suggerisci?

Grazie.

    
posta Jorge 14.05.2017 - 14:24
fonte

1 risposta

1

Lo farei in questo modo:

  • Avere un prodotto di classe che definisce tutte le proprietà fondamentali della cosa; tutto ciò che è indipendente dal Paese, dalla lingua o dalla valuta dell'utente.
  • Quindi, hai ProductDescriptor . Uno per ogni lingua.
class Product {
    private $id;
    private $categories;
    // ...

    private $descriptors;
}

class ProductDescriptor {
    private $product;
    private $locale;

    private $name;
    private $description;
    private $price;
    // ...
}
    
risposta data 14.05.2017 - 17:08
fonte

Leggi altre domande sui tag