2 votes

Comment puis-je utiliser le modèle du constructeur pour construire différents types d'objets similaires ?

J'utilise actuellement le modèle de construction tel que défini ici :

Question précédente montrant mon utilisation du motif constructeur

Le problème que je rencontre maintenant est l'obligation de créer la structure suivante :

- ZipHolder: file metadata present
    * File mainFile
    * File optionalFile
    * List<File> files

OU :

- ZipHolder: no file metadata present
    * File mainFile
    * File optionalFile
    * List<File> files

Les deux sites ZipHolder y File sont construits à l'aide du modèle de construction, mis en œuvre en tant que classe statique interne de chacun. A ZipHolder prend un mainFile en tant que paramètre obligatoire du constructeur et remplit au préalable certaines informations dans le fichier ZipHolder qui peuvent être remplacées, le cas échéant. A File contient le contenu du fichier et les métadonnées associées relatives à ce fichier. La validation à la fois sur le ZipHolder y File est alors effectuée lors de l'appel de la build() de chacun Builder classe. Les objets sont ensuite pris et sortis dans une hiérarchie de fichiers ZIP qui doivent ensuite être lus dans la même structure d'objets, si nécessaire.

Cela fonctionne bien et donne un degré de flexibilité dans la création d'objets tout en assurant l'immuabilité. J'ai cependant rencontré un problème. Une nouvelle exigence s'est présentée, imposant que File les objets peuvent avoir des métadonnées et contenu du fichier OU seulement le contenu du fichier. Je me suis dit que je pouvais simplement passer une valeur booléenne au constructeur pour l'indicateur de contenu. ZipHolder pour permettre d'ignorer la validation habituelle des métadonnées. Cela semble correct, mais il faut alors un File MainFile pour être construit - essentiellement, une situation de poule et d'œuf. J'ai ensuite pensé à déplacer le drapeau sur le site de l'entreprise. File classe. Cela semblait correct jusqu'à ce que je réalise que l'on pouvait potentiellement créer de multiples File des objets, certains avec des métadonnées obligatoires et d'autres avec uniquement le contenu du fichier, sans aucun moyen de faire respecter les contraintes de manière générale.

Je suis donc quelque peu perplexe quant à la manière de procéder. Je ne vois pas de moyen évident de découpler l'exigence d'un système de gestion de l'information de l'entreprise. MainFile pour un ZipHolder d'une manière élégante. Des concepts tels que les classes abstraites, les interfaces, les classes de base et autres me viennent à l'esprit, mais j'ai besoin de conseils dans cette situation particulière.

Donc ma question est :

Puis-je autoriser les deux scénarios tout en conservant le modèle de construction selon les raisons indiquées dans mon lien ci-dessus ?

1voto

U Mad Points 1456

Je n'ai pas bien compris le problème mais vous devriez probablement faire une classe MainFile extends File implémentez-y des contraintes et demandez à l'utilisateur de passer une instance de MainFile à la fabrique de ZipHolder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X