2008-12-29 14 views
2

J'essaie d'utiliser le modèle de référentiel dans une instance de stockage d'images. Ce que je fais est enregistrer les images réelles dans un répertoire sur le disque, mais enregistrer des données sur les photos et quelles photos vont avec quel objet dans une base de données. Je me demandais si je devrais utiliser 2 interfaces pour le stockage, comme IStorePicRepo et IStorePicDataRepo ou avoir 1 interface et l'implémenter dans 1 classe. Cela me semble ne pas devoir être implémenté par la même classe puisque nous avons affaire à 2 mécanismes de stockage différents.Combien de types doivent implémenter le modèle Repository?

Des pensées?

Répondre

1

Je ne connais pas grand chose au modèle de référentiel, mais je n'abrégerais pas Repository comme Repo dans mon nom d'identificateur. Abbrs. confondez-moi.

2

Il n'y a pas de solution miracle ici.

Mais je vais probablement finir avec la conception suivante:

IBinaryDataService: Pour une économie générale des données en tant que format binaire. Les objets à sauvegarder doivent avoir une méthode pour l'écrire dans un OutputStream. Il devrait y avoir une méthode convaincante pour le charger dans l'objet original aussi.

IDataIndexService: Pour l'index des attributs de données/tags, pour faciliter la recherche. Correspondent étroitement aux données de l'image que vous avez décrite.

IPicRepo: Seule l'interface exposée au client. Les clients devraient l'utiliser, et ne connaissent jamais les deux services ci-dessus.

FileSystemBinaryDataServiceImpl: Implémentation du service IBinaryDataService ci-dessus.

DbDataIndexServiceImpl: Implémentation de IDataIndexService ci-dessus.

PicRepoImpl: Implémentation de l'IPicRepo ci-dessus. Utilisez spring pour injecter FileSystemBinaryDataServiceImpl et DbDataIndexServiceImpl en tant que dépendances.

extensions supplémentaires si vous souhaitez:

IPersistentModel: Représentation d'un objet qui peut être persisté. A les méthodes write (OutputStream), read (inputStream) et getAttributes(): Map

PicModel: Implémentation de IPersistentModel ci-dessus.

PS. Ceci est juste un aperçu général de haut niveau.