Où devrait-JDBC-application conforme de stocker ses instructions SQL et pourquoi?
Jusqu'à présent, j'ai réussi à identifier ces options:
- Codé en dur dans business objects
- Intégré dans SQLJ clauses
- Encapsuler dans des classes séparées, par exemple Objets D'Accès Aux Données
- Les métadonnées (de dissocier l'objet schéma du schéma de données - décrire les mappages entre eux dans les métadonnées)
- Les fichiers externes (par exemple, les Propriétés ou les Fichiers de ressources)
- Procédures Stockées
Quels sont les "Pros" et les "Contre" de chacun?
Devrait le code SQL être considéré comme "code" ou "métadonnées"?
Devrait procédures stockées uniquement être utilisé pour l'optimisation de la performance ou ils sont légitimes abstraction de la structure de base de données?
La performance est un facteur clé de la prise de décision? Ce sujet de l'enfermement?
Ce qui est mieux – couplage lâche ou serré de couplage et pourquoi?
ÉDITÉ: Merci à vous tous pour les réponses – voici un résumé:
Orientée métadonnées c'est à dire Mappings Objet Relationnel (ORM)
Pour:
- Très abstrait - serveur de base de données peut être commutation sans la nécessité de changer le modèle
- Répandue pratiquement une norme
- Réduit la quantité de SQL nécessaires
- Peut stocker SQL dans les fichiers de ressources
- La Performance est (généralement) acceptable
- Les métadonnées de l'approche axée sur la
- (Base de données) fournisseur de l'indépendance
Inconvénients:
- Cache SQL et vrai développeurs intentions
- SQL difficile d'être examinées et modifiées par DBA
- SQL peut-être encore nécessaire pour impair cas
- Pouvez forcer l'utilisation d'une propriété langage de requête par exemple HQL
- Ne se prête pas à une optimisation (abstraction)
- L'absence de l'intégrité référentielle
- Substituts du manque de connaissances SQL ou le manque de soins de code dans la base de données
- Jamais correspondre à la base de données native la performance (même si il est proche)
- Le code du modèle est très serré, couplé avec le modèle de base de données
Codé en dur/encapsulée dans une couche DAO
Pour:
- SQL est conservé dans les objets qui l' les données d'accès (encapsulation)
- SQL est facile à écrire (vitesse de de développement)
- SQL est facile à suivre vers le bas lorsque des changements sont nécessaires,
- La solution la plus Simple (pas de désordre l'architecture)
Inconvénients:
- SQL ne peuvent pas être examinées et modifiées par DBA
- SQL est susceptible de devenir DB spécifiques
- SQL peuvent devenir difficile à maintenir
Procédures Stockées
Pour:
- SQL conservés dans la base de données (près de de données)
- SQL est analysée, compilé et optimisé par le SGBD
- SQL est facile pour le DBA pour afficher/modifier
- Réduit le trafic réseau
- Une sécurité accrue
Inconvénients:
- SQL est liée à la base de données (le fournisseur lock-in)
- Le code SQL est plus difficile à maintenir
Les fichiers externes (par exemple, les Propriétés ou les fichiers de Ressources)
Pros
- SQL peut être modifié sans avoir besoin de reconstruire l'application
- Découple la logique SQL à partir de la application de la logique métier
- Dépôt Central de toutes les SQL états – facile à entretenir
- Plus facile à comprendre
Inconvénients:
- Le code SQL peuvent devenir des nations unies-maintenable
- Plus difficile de vérifier le code SQL pour la (la syntaxe) des erreurs
Intégré dans SQLJ clauses
Pour:
- Une meilleure vérification de la syntaxe
Inconvénients:
- Liens de trop près à Java
- Une baisse de rendement de JDBC
- Le manque de dynamique des requêtes
- Pas si populaire