2010-05-29 4 views
0

Lorsque vous utilisez SQL Alchemy pour extraire votre couche d'accès aux données et utiliser des contrôleurs comme moyen d'accéder aux objets de cette couche d'abstraction, comment les jointures doivent-elles être gérées? Ainsi, par exemple, supposons que vous ayez une classe de contrôleur Orders qui gère les objets Order de manière à fournir des méthodes getOrder, saveOrder, etc et un contrôleur similaire pour les objets User.SQL Alchemy MVC et jointures de contrôleur croisé

Tout d'abord, avez-vous besoin de ces contrôleurs? Devriez-vous plutôt traiter SQL Alchemy comme "la" chose pour gérer l'accès aux données. Pourquoi s'embêter avec des choses orientées objet contrôleur là-bas lorsque vous avez à la place un moyen déclaratif propre à obtenir et à persister des objets sans avoir à écrire directement SQL non plus.

Eh bien une raison pourrait être que peut-être vous pouvez vouloir remplacer SQL Alchemy avec SQL direct ou Storm ou quoi que ce soit d'autre. Avoir des classes de contrôleurs là-bas pour agir en tant que couche intermédiaire aide à limiter ce qui devrait alors changer.

Quoi qu'il en soit - revenons à la question principale - donc supposons que vous avez ces deux contrôleurs, maintenant disons que vous voulez la liste des commandes pour un certain ensemble d'utilisateurs répondant à certains critères. Comment allez-vous faire cela? En général, vous ne voulez pas que les contrôleurs traversent des domaines - les contrôleurs d'ordres ne connaissent que les commandes et le contrôleur d'utilisateur à peu près les utilisateurs - ils ne plaisantent pas les uns avec les autres. Vous ne voulez pas non plus aller chercher tous les utilisateurs qui correspondent et ensuite envoyer une grande liste d'identifiants d'utilisateur au contrôleur d'ordres pour aller chercher les commandes correspondantes.

Ce dont nous avons besoin, c'est d'une jointure. Voici où je suis coincé - cela semble signifier soit les contrôleurs doivent traverser les domaines ou peut-être qu'ils devraient être supprimés complètement et vous faites simplement la jointure via SQL Alchemy directement et obtenir les objets utilisateur et/ou commande résultant selon les besoins. Pensées?

Répondre

2

Les contrôleurs sont destinés à encapsuler des fonctionnalités pour votre commodité. Ne pas lier vos mains. Si vous voulez rejoindre, simplement rejoindre. Utilisez le contrôleur que vous pensez logiquement le plus apte à faire la requête.

Questions connexes