Je construis un système dans lequel Meeting
peut avoir zéro ou plus Attachment
s. Pour éviter de charger le fichier binaire de pièce jointe chaque fois que je charge un Meeting
, j'ai un AttachmentRef(size, mimetype, reference, name, hash)
.Gestion des pièces jointes
Cette référence est créée par une usine deviner le mimetype
, calculer la hash
et size
et que tout est d'origine assurent sauvé côté du contenu binaire: AttachmentsFactory.create(name, byte[]):AttachmentRef
. Puis, lorsque l'utilisateur veut récupérer une pièce jointe, il doit déréférencer la référence. Le Attachment
est plus ou moins identique à une référence sauf qu'il a le contenu binaire Attachment(size, mimetype, name, content)
(Itw peut être implémenté avec une composition de référence et un octet []).
Ma question concerne la récupération de cette pièce jointe, j'ai deux possibilités principales et je voudrais savoir laquelle est la meilleure dans un design "DDD"?
1 - référence Dumb, le service intelligent
AttachementService {
dereference(ref):Attachment {
// Get the binary, recompute and verify the hash and return an Attachment
}
}
attachmentService.dereference(ref)
2 - référence intelligente, service muet
AttachmentService {
read(ref):byte[] {
// Just return the content for the ref
}
}
AttachmentReference {
dereference(attachmentService) {
content = attachmentService.read(this)
// recompute and verify the hash
return new Attachment(this, content)
}
}
ref.dereference(attachmentService)
Ok merci; C'est plus ou moins ce que j'avais en tête. Mais pour retourner le contenu d'une pièce jointe, je dois vérifier que son hash est inchangé. Est-ce la responsabilité de 'AttachmentRef' ou de la couche application? En fait, c'est le 'AttachmentFactory' qui calcule le hash et construit le' AttachmentRef' mais idéalement l'algorithme doit être le même (code) alors où dois-je le mettre? –
Je place ce traitement dans la couche application/intégration. Lorsque vous stockez initialement la pièce jointe, vous devez calculer le hachage et il est associé à la pièce jointe. Vous pouvez même ajouter un nom d'algorithme à la pièce jointe (ou le faire plus tard si vous souhaitez changer d'algorithme). Ensuite, lorsque vous récupérez le contenu, disons, 'ContentService' aurait l'algorithme de hachage injecté (ou le conteneur de l'algorithme). Il pourrait alors retourner le résultat d'un fetch et le résultat peut indiquer si le hachage était une correspondance; Sinon, lancez une exception si elle ne correspond pas et devient un problème d'opération. –
Merci beaucoup Eben –