Dans mon framewrok j'ai une interface ITransaction.
Il implémente certaines opérations de base comme Commit() et Rollback(), il est utilisé pour les fichiers plats et d'autres sources de données.
Cependant, NHibernate possède également une interface ITransaction.
Ce n'est pas la même chose que mon interface car il existe des méthodes spécifiques à la base de données, mais il existe des similitudes.
Mon problème est que je veux qu'une transaction NHibernate soit considérée comme ma propre transaction afin que je puisse changer plus facilement les implémentations entre la base de données et les fichiers plats.
Comment puis-je combiner les deux interfaces pour que NHibernate puisse toujours accepter mes objets de transaction NHibernate et mon framework puisse accepter mes objets de transaction NHibernate parce qu'ils appartiennent à MyFramework.ITransaction?Question de conception: Différents types de transactions dans un système
Répondre
Avez-vous une classe de base commune, qui pourrait implémenter à la fois NHibernate.ITransaction et MyFramework.ITransaction? Je ne sais pas que je créerais une classe de base commune pour la seule raison d'implémenter ces deux interfaces, mais si vous avez déjà une classe de base commune pour d'autres raisons, pourquoi pas?
MyFramework.ITransaction pourrait hériter de NHIbernate.ITransaction, en s'assurant que tous les implémenteurs de MyFramework.ITransaction seraient également implémenteurs si NHibernate.ITransaction. Enfin, vous pouvez implémenter un modèle d'adaptateur, avec un ITransactionWraper, et 2 implémenteurs (MyFrameworkTransactionWrapper et NHibernateTransactionWrapper). Tout votre code serait écrit dans l'interface ITransactionWrapper, et ses implémenteurs délégueraient des appels à l'ITransaction correcte. Comme la plupart des implémentations de modèle d'adaptateur, vous utiliserez probablement un modèle Factory ou AbstractFactory pour créer le wrapper correct lors de l'exécution, comme dicté par la configuration.
- 1. Meilleure conception de base de données pour un système de discussion avec différents types de catégories?
- 2. une question de conception de système
- 3. quels sont les différents types de modèles de conception?
- 4. DB question de schéma, types de produits
- 5. Question de conception: Comment concevez-vous un système d'événements récurrents?
- 6. MVP, question de conception
- 7. transactions de magasin de conception de base de données
- 8. Question de conception DAL
- 9. Principes de conception pour la conception de l'architecture de base de données du système de transactions financières?
- 10. différents types d'entité dans un seul fetchedResultsController?
- 11. MVC question de conception
- 12. Différents types de doubles dans vb.net?
- 13. jQuery question de conception
- 14. Question de conception C++
- 15. question de conception
- 16. Différents types de types CATransition disponibles dans l'iPhone sdk
- 17. .NET question de conception
- 18. Question de conception
- 19. Question de conception SQLite
- 20. Conception de MySQL DataBase Question
- 21. un champ avec différents types de données [SQLAlchemy]
- 22. Question de conception de base de données
- 23. Question sur les transactions MySQL
- 24. Différents types de liste chaînée
- 25. Comment mettre différents types de modèles dans un vecteur
- 26. Question de conception de cadre
- 27. Filetage ASP.NET + question de conception
- 28. MVC Controller.OnException pour différents types de résultats
- 29. Gestion de tables de différents types dans ASP.NET MVC
- 30. différents types d'exceptions dans .net
MyFramework.ITransaction ne peut pas avoir la même interface que NHibernate.ITransaction puisque NHibernate.ITransaction a des méthodes spécifiques à la base de données. Comment implémenteriez-vous un modèle d'adaptateur pour les interfaces? –
Ma réponse contient les bases du modèle Adapter (voir ITransactionWrapper), mais je vais essayer de développer un peu: supposons que NHibernate.ITransaction définit la fonction SaveToDB(), et que votre interface ITransaction définisse SaveToFile(). Vous voulez que tout votre code appelle simplement Save(). Votre ITransactionWrapper définirait Save(). Votre MyFrameworkWrapper implémenterait Save() comme un appel à son objet enveloppé SaveToFile(). Votre NHibernateWrapper implémenterait Save() en tant qu'appel à son objet enveloppé SaveToDB(). Votre code d'appel n'a jamais besoin de savoir quel objet est enveloppé. Il appelle simplement Save(). – mikemanne
note: mon nom d'objet ci-dessus est très rapide et sale - vous ne voudriez pas nommer une interface ITransactionWrapper, car "wrapper" décrit une implémentation. ITransactable ou ISaveable seraient de meilleurs noms, mais pas encore parfaits. – mikemanne