2010-02-19 3 views
1

Je ne pense pas trop fort et je fais juste quelque chose qui fonctionne, mais je me demande comment les gens les manipulent sans ORM ou autre bibliothèque.Comment gérez-vous ces problèmes courants SANS utiliser un ORM et utiliser directement JDBC (ou équivalent)? Si je n'utilise que JDBC, je dois généralement penser aux problèmes suivants:

  1. Désireuse vs Chargement Lazy: -vous avoir un seul objet de domaine et ont nuls les enfants à charge et rendre la responsabilité de l'appelant de rappeler l'OFA pour charger ces enfants en cas de besoin? Ou utilisez-vous simplement plusieurs objets de transfert pour le même objet de domaine? Cela signifie également que vous devez avoir des requêtes SQL distinctes pour le cas avide et le cas paresseux.

  2. Objets de domaine et objets de transfert: Avez-vous besoin d'objets de domaine et d'objets de transfert? Pour le cas ci-dessus, il peut être plus facile d'accomplir avec différentes représentations des objets de domaine via des objets de transfert. Enfin, si vous utilisez des objets de transfert, les objets liés seraient-ils "détachés"? En d'autres termes, si vous avez un Parent de classe avec plusieurs Enfants, le Parent aurait-il une instance d'une Collection d'Enfants ou serait-il demandé séparément?

  3. Affectation des ID: Jusqu'à présent, j'ai effectué un regroupement dans une transaction, puis affecté les ID à la fin. Cependant, cela nécessite une fonction publique pour définir l'id ...

  4. Cascading: Je suppose que le seul choix est de le faire manuellement ...

Il y a plus, mais cela est tout Je peux penser à maintenant.

EDIT: Quant à savoir pourquoi je pose cette question, vous savez comment certaines équipes de développement ont « peur » d'utiliser de ORM ou ne les aiment pas pour une raison quelconque (généralement parce qu'ils ne les comprennent pas), alors parfois JDBC est votre seul choix ...

+0

C'est ce qu'on appelle "la dure". ;-) –

Répondre

1

Eh bien, l'essentiel est qu'il existe différentes solutions à chaque problème, et la bonne pour vous dépendra du contexte: il n'y a pas de taille unique- approche globale pour parler de. Pour le numéro trois par exemple, nous avons une table qui maintient un compteur d'identifiant unique pour chaque type (une ligne par type d'entité): quand vous voulez un identifiant, sélectionnez la valeur courante pour un type puis incrémentez-la dans la base de données . Cette solution est simple mais ne s'adapte pas bien: si vous voulez l'améliorer, vous pouvez demander à la couche application d'allouer un chargement de ces identifiants (disons 50 à la fois pour chaque type) et les distribuer au besoin insérer de nouvelles données, retourner seulement à la base de données quand le pool a été épuisé. C'est essentiellement une émulation de quelque chose comme Oracle's sequences.

Pour le numéro quatre, chaque classe d'entités (classes qui enveloppent une seule table) qui a une relation avec un autre type d'entité est responsable de suppressions en cascade, etc.

En fin de compte un ORM est juste une abstraction, donc si vous regardez sous le capot, tous ces problèmes ont été résolus par les implémenteurs de la bibliothèque. Dans ce cas, il vous suffit de faire les démarches!

+0

Donc, en tant qu'extension, il est possible de résoudre ces problèmes sans réflexion et sans mandataire, et c'est ainsi que l'ORM sous le capot gère beaucoup de ce genre de choses? – GreenieMeanie

+0

@ GreenieMeanie: la réponse est que vous pouvez, mais pas nécessairement d'une manière générique.Je veux dire par là que vous pouvez concevoir des stratégies pour chaque problème et les implémenter à la main, mais vous aurez du mal à écrire quelque chose de générique pour faire le gros du travail sans ces fonctionnalités. Le plus proche que vous pourriez être en mesure de venir est un certain type de scripts de génération de code si vous travaillez dans un langage vraiment statique comme C++ dire. – jkp

+0

De plus, est-ce que votre solution est d'obtenir un identifiant à l'épreuve des balles? Le select devrait s'assurer de verrouiller pour éviter les ids dupe, non? Oracle a des séquences et SQLServer a des clés d'identité, pourquoi ne pas les utiliser? – GreenieMeanie

Questions connexes