Je travaille actuellement sur un projet DDD et j'ai récemment fait face à un problème concernant l'utilisation des DTO.DDD: Utilisation de DTO avec une logique différente
J'ai la DTO suivante dans mon domaine (le code est en php, mais pourrait être dans toutes les langues):
class TranslationDto {
private $locale;
private $text;
public function getLocale(...);
public function getText(...);
}
L'objectif est que l'interface utilisateur donnera le domaine d'un DTO avec un lieu et son correspondant texte. Ainsi, par exemple, si les paramètres régionaux « FR » ne se traduit pas, le DTO ressemblera à ce qui suit:
// UI => domain, for example when willing to persist the data (write)
TranslationDto [
'locale' => 'FR',
'text' => null,
]
Maintenant la question:
Sur le flux interface utilisateur à domaine, si un lieu est non traduite, la valeur $text
du DTO sera null
. J'ai implémenté le même type de logique du côté Domain-to-UI, ce qui signifie que si les paramètres régionaux ne sont pas traduits, alors la valeur $text
du DTO sera null
.
Toutefois, un développeur de mon équipe a ajouté une logique de repli. Par exemple, si les paramètres régionaux FR
n'existent pas, le domaine renvoie les paramètres régionaux par défaut (par exemple, EN). Le retour objet de domaine à l'interface utilisateur ressemblera alors à ceci:
TranslationDto [
'locale' => 'FR',
'text' => 'The fallback text, in english',
]
j'embarassed avec cela, comme l'interface utilisateur à domaine « logique » sera brisée par le domaine à l'interface utilisateur « logique » Par conséquent, du point de vue du développeur, nous devrons faire attention à ce DTO en le lisant, car nous ne le ferons pas maintenant s'il était fallback ou non. En d'autres termes: nous ne pouvons pas vraiment "faire confiance" à cette DTO. D'autre part, cette logique de repli est plus pratique sur la couche d'interface utilisateur, car l'interface utilisateur ne se soucie pas de traduire l'objet après l'avoir demandé au domaine: il contiendra toujours le texte correct. De plus, comme nous avons besoin de gérer ces traductions (dans un backend d'administration par exemple), nous aurons maintenant 2 points de terminaison au lieu d'un: un pour demander les DTO avec leur valeur "réelle" (sans repli), et un pour les demander avec leur valeur de repli. Qu'est-ce que vous en pensez, quelle est la meilleure pratique? Ou y a-t-il une meilleure méthode alternative?
Vive