[Zope3-french-user] Re: Premier problème pour zblog : comment gérer les "Category"
Thierry Florac
thierry.florac at onf.fr
Ven 29 Sep 11:47:58 CEST 2006
Le vendredi 29 septembre 2006 à 10:59 +0200, KLEIN Stéphane a écrit :
> 2006/9/29, Thierry Florac <thierry.florac at onf.fr>:
>
> Le vendredi 29 septembre 2006 à 01:13 +0200, KLEIN Stéphane a
> écrit :
>
> > 2006/9/28, KLEIN Stéphane <klein.stephane at gmail.com>:
> > > Bonjour,
> > >
> > > pour le moment, je base mon code sur http://codespeak.net/svn/z3/zblog/trunk/
> >
> > >
> > > Je souhaite ajouter la possibilité de classer les billets dans des catégories.
> > >
> > > Un billet peut être dans une ou plusieurs catégories.
> > >
> > > Pensez vous qu'il faut gérer ça avec Catalog ? de plus, créer un objet
> > > Category ?
> >
> > Après réflexion, dans IBlog, je pense ajouter un schema "category" du
> > type IDict.
> >
> > Dans IBlogEntry je vais ajouter un schema ou une annotation "category"
> > du type IList. Celle-ci contiendra une ou plusieurs clé conrespondante
> > au champ "category" de IBlog.
> >
> > Pour le moment je ne comprends pas trop quand utiliser un schema ou
> > une annotation.
>
>
> ...
>
>
>
> Dans le cas qui nous préoccupe, j'aurais fait ainsi :
> - création d'une interface IBlogEntry, correspondant aux
> propriétés "internes" du billet, hors catégorie (titre,
> en-tête, corps...)
> - création d'une interface ICategory, avec une propriété
> "category" de type "Text", correspondant aux propriétés d'une
> catégorie
> - création d'une interface ICategoryList, avec une propriété
> "categories" de type List, contenant des objets implémentant
> "ICategory"
> - création d'un adapter de IBlogEntry vers ICategoryList,
> stockant les catégories sous la forme d'annotations.
> - création d'un catalogue avec un index de type
> "SetIndex" (dans zc.catalog) qui va indexer la propriété
> "categories" des objets implémentant l'interface ICategoryList
> et permettra donc de retrouver les billets d'une catégorie
> donnée.
>
> Tout d'abord, merci pour ta longue réponse, elle m'a bien fait
> réfléchir car je n'avais pas du toute cette vision. L'idée d'un
> adapters me plaît beaucoup.
>
> Par contre, j'ai deux questions :
>
> * si je veux pouvoir gérer ma liste de catégorie indépendamment des
> BlogEntry, c'est à dire, même si je n'ai aucun billet dans mon blog,
> je veux pouvoir définir une liste de catégorie. Par conséquent, elle
> doit bien être stoqué quelque part ? Pour cela, je pensais la stocker
> dans un schema de IBlog (IBlog étant le conteneur de mes billets).
>
> * Dans ma liste de catégories qui est présente dans IBlog, quand je
> modifie l'intitulé d'une catégorie je souhaite que cet intitulé soit
> modifié pour tous les billets. Conclusion, l'annotation catégorie dans
> BlogEntry doit contenir un index version une catégorie, cela afin
> d'éviter de modifier tous les billets un par un.
> Maintenant je me demande si je suis obligé de recourir à un index ou
> alors faire une référence à une instance Category.
>
> Je ne sais pas si mon explication est claire :)
Je crois que oui, sauf pour le dernier point...
Une option possible (après trois secondes et demie de réflexion...) :
- créer effectivement au niveau de IBlog une propriété de type List
destinée à stocker les catégories
- utiliser un composant de type "IIntId", de façon à affecter à chaque
catégorie, qui est alors un objet à part entière, un numéro unique
- référencer les catégories d'un billet sur la base de ce numéro
unique, et non sur celle du libellé des catégories.
Cette méthode est plus souple en terme de gestion des catégories
puisqu'une modification de libellé s'applique directement à tous les
billets ; par contre, elle est un peu plus contraignante en termes de
consultation et de recherche puisqu'elle oblige en permanence à faire
des accès en deux étapes.
Autre solution à creuser sans doute :
- définir les catégories dans IBlog, sous la forme d'objets de type
"Category"
- au niveau de chaque billet, affecter une liste d'objets de type
"Category" (et non pas une liste de libellés des catégories concernées)
dans une PersistentList ; la ZODB le permet aisément :
billet.categories.append(categ1)
Pour avoir les libellés des catégories d'un billet, on devra alors faire
un truc du genre [category.title for category in billet.categories]
Dans tous les cas, il est bon alors d'indexer tout ça dans un catalogue
pour accélérer les recherches...
A+
Thierry Florac
P.S. : la sélection des catégories affectées à un billet peut
facilement, dans les deux cas, passer par un vocabulaire...
--
Chef de projet intranet/internet
Office National des Forêts - Département Informatique
2, Avenue de Saint-Mandé
75570 PARIS Cedex 12
Mél : thierry.florac at onf.fr
Tél. : +33 01.40.19.59.64
Fax. : +33 01.40.19.59.85
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.afpy.org/pipermail/zope3-french-user/attachments/20060929/e66a30d7/attachment.htm>
Plus d'informations sur la liste de diffusion zope3-french-user