- 1
[Opened] overload jDaoCompiler
Posted by isepman on 01/16/2012 15:45
Bonjour A tous,
Avant tout Merci pour cette nouvelle version de jelix! La debug bar est vraiment bien, jCache, jKvDb. Toutes ces fonctionnalités qui n'altèrent pas pour autant la robustesse et la simplicité du framework...
Ma question est la suivante: serait il possible (ou envisageable) de surcharger les classes jDaoCompiler (plus particulièrement jDaoParser, jDaoProperty et jDaoMethod) ?
Je m'explique, j'aimerais rajouter des propriétés dao à mes records et des méthodes à mes factory:
- Par exemple, on pourrait rajouter un attribut searchable sur les propriétés et créer une méthode "search()" dans les factories qui irait rechercher une valeur dans tous les champs de la table avec cette propriété à true (en faisant un or like %%).
- On pourrait aussi y rajouter une proprieté "listable", qui permettrait de faire une methode "listAll" qui n'irait rechercher que les champs "listable" pour alleger les requetes des pages de liste.
Enfin bref, pleins d'autres applications possibles qui fairaient qu'on puisse faire du dao un vrai fichier de métadonnées spécifiques à notre projet.
Toutes ces manipulations ne sont pas permises aujourd'hui car les propriétés Daos sont figées dans la classe jDaoProperty, on est donc obligé de faire soit des traitements particuliers, soit de créer d'autres fichiers de métadonnées.
Si on va plus loin, on pourrait même rajouter d'autres types de données dans les daos (par exemples formatType="tel" pour désigner des numéros de téléphone) qui fairaient qu'une recherche sur ces champs formatterait automatiquement la chaine de recherche fournie au format tel qu'on l'a stocké dans la base de données (en supprimant les espaces, en enlevant/rajoutant les indicatifs pays...etc). Peut être que cette fonctionnalité dépend plus de jForms?
Merci,
[Opened] overload jDaoCompiler
Posted by laurentj on 01/16/2012 16:59
Bonjour,
non ce n'est pas possible.
on pourrait rajouter un attribut searchable sur les propriétés et créer une méthode "search()"
Qui t'empeche de la créer cette methode ?
Ce genre de méthode ne peut de toute façon pas être généré. D'une part parce que rechercher sur plusieurs champs à la fois, est assez spécifique. Et d'autre part, selon le type de base de donnée, les types d'index, les extensions de bases de données ou autre, la requête est différente.
like %%
Faut faire gaffe à l'utilisation du like. Faut le limiter à des requêtes qui ne seront appelées que peu souvent. Tu peux tuer une base de donnée avec ça. De toute façon, les résultats renvoyés avec ça sont peu pertinent en général. Utilise plutôt un moteur de recherche annexe si c'est pour un formulaire de recherche ou équivalent.
On pourrait aussi y rajouter une proprieté "listable", qui permettrait de faire une methode "listAll" qui n'irait rechercher que les champs "listable"
Et donc au final, tu te retrouves avec des champs non renseigné dans les records renvoyés. Et si derrière ça il y a des $dao->update avec ces mêmes objets -> catastrophe sur les champs renseignés. En effet, jDao ne tiens pas compte de "l'état" des propriétés PHP des records.
Quand à d'autres types de champs, c'est plutôt le rôle de jForms en effet. Sinon on aurait à chaque fois que l'on a un formulaire + sauvegarde, double convertion/verification (jforms et jdao).
jDao (et en général un ORM), n'est pas censé faire des trucs magiques. Il est préférable que les données que tu récupères reflète la réalité. Sinon comment ferait-tu si à un moment tu veux la donnée brute ? Et comment gérer les cas où ce que tu as en base ne passe pas le "filtre" ? etc etc..
- 1