7
votes

Appeler un Dao d'un autre Dao?

Cela peut-il avoir un sentiment de sens?

Disons que j'ai besoin d'atteindre un objet de la DB qui a une relation avec un autre objet (représenté par une clé étrangère dans la DB et par une composition de mon objet de domaine). Si dans mon premier Dao, je récupère les données de l'objet 1, appelez le DAO pour l'objet 2, et enfin (à partir de la première DAO, appelez le Setter dans l'objet 1 et donnez-lui l'objet 2).

Je sais que je pouvais faire une jointure à la place, mais cela me semble plus logique pour découpler la fonctionnalité (c'est pourquoi je suis sceptique à propos de l'appeler un DAO d'un autre). Ou devrais-je déplacer une partie de la logique à la couche de service?

merci

: Je pense avoir résolu le problème avec l'aide des réponses: tout J'avais besoin de faire était d'ajouter ce qui suit à ma cartographie de l'objet 1: xxx

Je n'avais rien à changer d'autre. Merci pour l'aide!


1 commentaires

Je dirais non, j'ai expliqué dans un autre fil Stackoverflow.com/questions/8988252/CAN-A -Dao-Call-dao


3 Réponses :


10
votes

En lisant cela, je ne peux que conclure que probablement, vous le faites mal ..)

Si vous configurez vos mappages directement entre ObjectA et ObjectB (pourrait être ONETOne, OneTomanany ou MétéoTomany), Hibernate (paresseux) chargera la référence de A à B automatiquement. Cela éliminera la nécessité d'interroger le deuxième DAO et de définir la référence d'objetb dans Objecta.

Prenez cette étape plus loin et vous n'avez même pas besoin de la DAO pour ObjectB!


2 commentaires

Merci..Ce est ce que je travaille. Puis-je s'il vous plaît obtenir un exemple de la façon dont cette cartographie semblerait (je n'ai pas beaucoup de chance sur Google). De plus, avec les mappages corrects, aurais-je toujours besoin de spécifier un "join" dans mon DAO?


@ ES11: Je vois que vous avez résolu votre problème .. content de pouvoir aider. Pour répondre à votre question: Ce que vous avez semble suffisant, donc non, en dehors de vos mappages, vous n'aurez pas à déclarer une jointure lors de la récupération de vos objets de la DAO.



8
votes

Je préfère personnellement éviter les références entre les DAOS. Si j'ai besoin d'une donnée récupérée par DAO pour effectuer une autre opération, je découplie les DAOS:

// Bad - have to inject Dao into antoher Dao
class FooDao extends BaseDao {
  BarDao barDao;

  public Foo complexLoad() {
    return doFooStuff(barDao.loadBar());
  }
}

// Good - dependency on Bar only, not to Dao
class FooDao extends BaseDao {
  public Foo complexLoad(Bar bar) {
    return doFooStuff(bar);
  }
}


0 commentaires