2010-09-14 4 views
0

J'ai un DB et un framework de mapping qui a été écrit par la société pour laquelle je travaille. J'ai donc une classe pour chaque table dans la base de données et ces classes permettent d'appeler la base de données et d'obtenir diverses informations dans DataSets ou DataTables par exemple. Maintenant, je suis censé écrire cette information dans un fichier TXT dans un certain format (j'ai les spécifications à quoi cela devrait ressembler). C'est à propos de domaines, il y aura beaucoup de domaines dans un fichier et pour chaque succession il y a environ 40 lignes dans le fichier. Je sais comment écrire dans un fichier et d'autres choses, ce que je cherche est une bonne approche pour construire cette fonctionnalité en général.Ecrire des informations de DB dans un fichier - bon appraoch?

Cela pourrait être trop général pour donner de bons conseils, mais y a-t-il un moyen éprouvé de faire de telles choses?

Merci :-)

+0

Combien de tables/classes y a-t-il? Pouvez-vous créer une classe plus générale, peut-être générique pour faire cela? Y aura-t-il des problèmes d'accès en écriture? À quelle fréquence le programme générera-t-il ces fichiers? –

+0

Le fichier sera créé une fois par jour et il y a beaucoup de classes ... les problèmes d'accès en écriture n'apparaîtront pas. – grady

Répondre

0

Appelons les classes qui vous donnent les informations tableau TableInfo objets

Je crée une interface IDBInfoWriter, avec une méthode WriteDBInfo(TableInfo ti)

Puis une mise en œuvre de IDBInfoWriter, par exemple DBInfoFileWriter, avec un FileWriter en tant que membre privé. Chaque appel à WriteDBInfo se vider tout dans le fichier écrivain

Enfin un objet DBInfoWalker, qui prendrait une liste de instancié TableInfo et un IDbInfoWriter

class DBInfoWalker 
function new(TableInfo[] tis, IDBInfoWriter idbiw) 
{...} 

function process() 
{ 
    for each TableInfo ti in tis 
    { 
     idbiw.WriteDBInfo(ti); 
    } 
} 

De cette façon, vous pouvez

  • travail sur tout sous-ensemble de TableInfo que vous voulez (disons que vous voulez juste une liste de TableInfo en commençant par "S", passez seulement cette liste dans le constructeur de DBInfoWalker
  • Créer autant de styles de sortie pour votre tableInfo, il suffit de créer la mise en œuvre correcte de IDBInfoWriter (réseau, unique fichier, plusieurs fichiers, etc.)

Bien sûr, c'est juste une possibilité :)

Bonne chance

+0

Je créerais juste une classe DBInfoWriter et lui donnerais un 'TextWriter' pour écrire. L'abstraction de flux est déjà là, pas besoin de la dupliquer dans vos propres classes. – tdammers

+0

En effet, mais laissons YAGNI de côté pendant une seconde :) la façon dont je vois cela est que si on me demandait de consigner DB Info, j'utiliserais toujours une interface pour bénéficier des changements futurs et potentiels dans l'implémentation. Si l'on me demande de modifier la journalisation dans une autre base de données, j'échangerais mon instanciation d'un DBInfoFileWriter en DBInfoDBWriter. DBInfoWalker ne devrait pas s'inquiéter à ce sujet. Je connais YAGNI, mais comme c'est un petit changement à faire, je cours avec – samy

Questions connexes