Ticket #5 (new enhancement)

Opened 2 years ago

Last modified 5 months ago

Etendre l'objet record

Reported by: zagor Assigned to:
Priority: low Milestone:
Component: jelix:dao Version:
Severity: normal Keywords:
Cc: Php version:
Review: review? Hosting Provider:
Documentation needed: 0 Blocking:
Blocked By: 24, 181, 182, 183, 184, 185, 186, 195, 200, 209, 210, 211, 213, 214, 223, 242, 250, 252, 253, 254, 255, 636

Description

accroitre les propriétés et les méthode d'un objet record jDao créé par Jelix.

Voir un exemple sur le forum http://jelix.org/forums/read.php?5,359

Attachments

RecordProxy.class.php (4.1 kB) - added by anonymous on 04/10/07 18:21:45.
RecordProxy? and MapDao? classes.
daoRecordExtended.diff (7.3 kB) - added by sylvain261 on 06/09/08 11:02:22.
Possibilité d'étendre les objets records

Change History

04/10/07 18:21:08 changed by Aubanel MONNIER

Ca peut peut-être faire avancer le shmil-blick, j'ai fait une classe proxy pour les records, astucieusement nommée RecordProxy?, que j'attache. Mes objets métiers en héritent presque tous. J'ai également dans ce fichier une classe MapDao? qui gère les relations entre tables, en utilisant une table pivot (n pour n) ou un accès direct (n pour 1). C'est moyennement commenté et terriblement ad hoc

(comprendre noms touts pourris et pas homogènes, certains bouts et usages non testés) mais ça me semble une bonne base de réflexion.

04/10/07 18:21:45 changed by anonymous

  • attachment RecordProxy.class.php added.

RecordProxy? and MapDao? classes.

07/05/07 11:16:34 changed by laurentj

  • severity changed from major to normal.
  • phpversion changed.
  • isp changed.
  • priority changed from normal to low.
  • milestone set to Later.
  • blocking changed.

07/05/07 12:19:34 changed by laurentj

  • milestone deleted.

Milestone Not planed yet or later deleted

06/06/08 17:55:44 changed by sylvain261

  • review changed.
  • docneeded changed.

J'ai implémenté quelques ajouts dans jDao pour permettre d'étendre l'objet record et donc éviter d'avoir d'un coté la classe métier et de l'autre le dao, la classe métier ayant alors à manipuler le dao pour arriver à ses fins.

La modif consiste en un petit ajout dans jDaoGenerator et à 2 nouvelles classes (pour pas perturber les 2 existantes). Ces 2 classes sont :

  • jDaoRecordBaseExtended.class.php (qui hérite de jDaoRecordBase)
  • jDaoExtended.class.php (qui hérite de jDao)

(Oui les noms des classes sont pas très inspirés...)

Pour s'en servir, c'est très simple :
Lors de l'appel à jDao pour récupérer une factory, on utilise jDaoExtended à la place de jDao.
jDaoExtended recoit un paramètre supplémentaire qui est le nom de la classe souhaité pour les objets records.
Donc par exemple :
$maFactory = jDao::get('table1');
devient :
$maFactory = jDaoExtended::get('table1', 'table1Record');

Cette classe est à placer dans le répertoire classe du même module que le dao. Le fichier doit avoir un nom bien précis : dddRecordXXX.class.php où

  • ddd correspond au nom du dao
  • XXX est ce que vous voulez (utile uniquement si je veut avoir plusieurs classes métiers pour le même dao)

Par exemple si votre dao s'appelle table1 vous pouvez nommer votre classe record étendu table1Record.class.php
Le nom de la classe suit le même schéma : (dddRecordXXX)

Cette classe doit hériter de la classe jDaoRecordBaseExtended. Elle possède alors toutes les propriétés membres de l'objet record habituel (c'est implémenté via un tableau privé et des accesseurs).

L'utilisation de la factory et des records sont strictement identiques aux factories et records classique sauf qu'au niveau des records vous avez la possibilité d'y ajouter des méthodes métiers à vous :-).
Si vous y ajoutez des propriétés, il va de soit qu'elle ne seront pas prises en compte lors de l'appel à la méthode update de la factory.

Il n'est pas nécessaire de se préoccuper du chargement de la classe de votre record, jDaoExtended en fait l'include si nécessaire.

Laurent, on avait parlé de cette approche et tu me répondais que c'était contourner le pattern dao pour en faire autre chose et qu'il valais mieux réfléchir à un vrai ORM.
Je vais quand même proposer un pacth car je garde espoir de le voir intégrer. Ce patch apporte à mon sens bcp et n'est pas impactant sur jDao, c'est simplement qqch en plus qui permet de travailler de façon plus simple en attendant jOrm qui viendra un jour.

06/09/08 11:02:22 changed by sylvain261

  • attachment daoRecordExtended.diff added.

Possibilité d'étendre les objets records

06/09/08 11:03:28 changed by sylvain261

  • review set to review?.
Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed