2016-10-13 2 views
2

I système d'écriture suivant l'architecture hexagonale.Quel objet devrais-je commander?

J'ai des commandes asynchrones et des objets de requête de synchronisation répartis dans UseCase.

Mon src look dossier comme:

-src 
--Entity 
---Task.php 
--UseCase 
---Command 
----CreateTask 
-----CreateTaskUseCase.php 
-----CreateTaskCommand.php 

Ma question est: Qu'est-ce que je peux/dois utiliser pour envoyer des données via la commande dans le constructeur de UseCase\Command\CreateTask\CreateTaskCommand

  • \Entity\Task
  • créer UseCase\Command\CreateTask\Request\Task qui serait avoir toutes les données nécessaires
  • seulement string/int/float

Cet exemple est trivial pour montrer le problème.

En ce moment je suis en utilisant l'objet de domaine (Entiti\Task etc) En situation réelle, j'ai UseCase\Command\CreateProcess qui ont besoin

  • UUID
  • instance [id, nom]
  • Source [node_id, node_name, leaf_id, leaf_name]
  • ressources [id, nom, type, etc. types normaux personne [nom, prénom]]

En suivant DDD, Process est mon agrégat. Toutes les entités existent uniquement en raison du processus de construction (Node, Leaf, Resource, Person). Ensuite, je ne veux pas de manière séparée, pour créer les autres entités, car cela fonctionne ma logique métier.

En raison de ce problème, la question est: que devrais-je choisir? Briser certaines règles?

Problèmes:

  • commande de liaison avec l'objet à l'intérieur du domaine, se lieront couche supérieure plus à noyau. Tout changement dans le noyau, sera la chaîne réagir avec toutes les couches
  • Création Request\* me faire beaucoup de classes, mais de façon claire de commande d'utilisation, et beaucoup plus de travail - UnitTest etc.
  • En utilisant uniquement le type standard (int, string, etc.) fera __counstruct avec 20 arguments. Je ne veux pas de tableau à plusieurs niveaux, car il ne sera pas nécessaire d'utiliser cette commande.

Merci pour votre aide.

+1

Ddd est principalement sur le voyage et une structure que votre entreprise se promène. Je doute qu'ils parlent d'une structure d'usecase/processus/tâche mais plus d'une personne faisant des choses. Regardez aussi dans les types de valeurs.arguments groupés – Batavia

+1

Vous avez raison, va supprimer DDD Tag :) – timiTao

+0

Vous avez annulé votre modification parce que vous avez ajouté le même texte à votre question que votre réponse. – kayess

Répondre

1

Après un certain temps, et l'expérience - Meilleure option consiste à utiliser des données standard de PHP. Finalement, il est bon de créer des objets pour cette commande (deuxième option), mais cela prendra du temps pour créer des classes et des tests.

N'utilisez jamais quelque chose de domaine - c'est un énorme inconvénient à l'avenir.