Bonjour,
J’ai un soucis avec l’architecture multi-couches que je suis en train de mettre en place. Le contexte est le suivant :
- Un site web vieillissant tourne sur une base Oracle. Cette base de données est volumineuse.
- Il a été choisi de réécrire ce site web en asp.net
- En plus de ce site web, nous devons écrire un logiciel pocket avec une base embarquée SQLite, sous Windows mobile 6.5 et inférieurs (le logiciel tournera sur des Psion).
La partie métier et service sera donc commune aux 2 plateformes.
Cependant, j’ai un problèmes avec ma couche DAO. Je me vois mal écrire 2 couches différentes qui seront composées à peu de choses près du même code (à part pour les dates, la syntaxe SQL entre Oracle et SQLite est proche) : une pour Oracle, une pour SQLite. Ca doublerait les coûts de maintenance en cas d’erreur dans une des requêtes exécutées.
Je ne vois que 2 solutions pour respecter la structure d’une architecture multicouches :
1. Ecrire entièrement le DAO à l’aide d’un framework de persistance… Les requêtes seront ainsi identiques sous Oracle comme sous SQLite. Cependant, personne dans la société ne maîtrise encore correctement ces outils, et j’ai vraiment peur des performances au moment où les métiers tourneront sous Oracle en production (la base est vraiment grosse, et les requêtes peuvent être assez compliquées)
2. Ecrire un « Wrapper » de base de données. En gros, il n’y aura qu’un DAO (et non pas un pour Oracle, un pour SQLite), qui utilisera ce Wrapper pour interroger la base de données. Donc, par exemple, si le DAO tourne sur SQLite, lors d’une interrogation il récupérera un DbDataReader, pendant que le Wrapper travaillera lui avec un SQLiteDbDatareader. De plus, si besoin, il transformerait le SQL pour l’adapter aux spécificités de la base sur laquelle il tourne.
3. … ? D’autres solutions ?
Et vous, comment verriez-vous les choses ?
Merci !!
Partager