2010-05-10 4 views
1

Ceci est une question super débutant, j'ai été la programmation depuis un certain temps, mais je viens d'apprendre OOP. J'ai une classe qui fonctionne avec l'entrée de l'utilisateur via la console C#.
Il existe différentes méthodes dans cette classe pour rassembler différents ensembles d'entrées.Classe Design Question

J'ai une autre classe qui prend ces ensembles d'entrée et les met dans une base de données.
Quelle est la meilleure façon de transmettre l'entrée de ma classe d'entrée à ma classe d'insertion de base de données?

Je dirais:

Y at-il quelque chose de mal avec cela ou est-il une meilleure façon de le faire? Devrais-je même avoir deux classes (La classe de base de données pourrait également prendre l'entrée de l'utilisateur)?

+0

Pouvez-vous créer un objet pour représenter vos données insérées dans la base de données? –

Répondre

2

Vous devriez avoir une classe "data", qui représente tous vos paramètres.

Votre classe GetParameters doit créer une instance de cette classe.

Votre classe InsertDatabase doit accepter une instance de cette classe.

public class Data 
{ 
    public string value1 {get;set;} 
    // add more properties here 
} 

public class GetInputParameters 
{ 
    public Data GetParameters() 
    { 
     var d = new Data(); 
     d.value1 = Console.ReadLine(); 
     return d; 
    } 
} 


public class InsertToDatabase 
{ 
    public void InsertRecord(Data value) 
    { 
     // database persistance code 
    } 
} 

De plus, vous pouvez utiliser une liste générique pour passer plus d'une fois instance de la classe de données, vous pouvez utiliser un tableau, mais une liste générique est beaucoup plus facile de travailler avec.

+0

Vous ne lui avez pas dit comment appeler 'InsertRecord. 'Aussi, il voulait passer une collection d'enregistrements, pas un enregistrement individuel. –

+0

Bross: Devrais-je avoir une classe de données différente pour différents ensembles d'entrée? @ Robert Harvey: C'est bon, je peux comprendre comment mettre les données dans une base de données, je suis surtout préoccupé par la conception de classe appropriée. – sooprise

+0

Les classes doivent être des noms/des groupes nominaux et non des verbes/des verbes ... GetInputParameters devrait être une méthode dans une classe. Idem avec InsertToDatabase. –

0

Le type de sécurité est le premier problème que je vois avec ceci. Une meilleure approche consisterait à envelopper votre base de données à l'aide de LINQ to SQL, puis à simplement passer l'objet métier dans une méthode Save() et Delete(). De cette façon, la mise en œuvre réelle de la base de données pourrait théoriquement être remplacée, mais vos objets de gestion seraient certainement utiles à long terme.

+3

Il est un débutant. Rien de tout cela n'aura de sens pour lui. –

0

Au moins deux classes est certainement une bonne idée. Vous voulez essayer d'encapsuler des fonctionnalités dans une classe. Dans une application de console standard, je suggère de créer une classe pour les E/S de console, une classe pour l'accès à la base de données et une classe qui leur permettra de se parler et éventuellement de manipuler les données (c'est-à-dire une classe de service). Ainsi, votre classe d'E/S de console peut attendre des données, puis appeler votre classe de service pour enregistrer les données, et votre service appelle alors votre base de données pour enregistrer les données.

+1

Exemples ... L'OP est un débutant. –

1

En général, je pense que la séparation de votre code en différentes couches est une bonne idée. À l'heure actuelle, vous avez votre couche d'interface utilisateur (celle qui fonctionne avec l'entrée de la console) et votre couche de données (celle qui insère des données). C'est un bon début.

Quel type de données collectez-vous et insérez-vous? Ce pourrait être un bon candidat pour une autre classe. Disons que c'est l'information de l'utilisateur, et un utilisateur entre son nom, son âge, son sexe, etc. Tout ce que vous collectionnez peut probablement être emballé dans un objet. Vous pouvez ensuite simplement passer cet objet à votre classe Data. La classe de données peut ensuite digérer cette information comme elle le doit.

Dans votre classe d'entrée:

User user = new User(); 
//get all user info from console, assigning it to your user object 
DatabaseInsertClass.InsertIntoDatabase1(user); 
+0

C'est ce que j'ai actuellement sauf, je l'ai sous la forme: DatabaseInsertClass.InsertIntoDatabase1 (ConsoleInterface.GetData()); Est-il recommandé d'affecter la sortie de ConsoleInterface.GetData() à un objet, puis de passer cet objet dans DatabaseInsertClass.InsertIntoDatabase1(): User user = new User(); user = ConsoleInterface.GetData(); DatabaseInsertClass.InsertIntoDatabase1 (utilisateur); – sooprise

+0

@Soo: Vous pouvez le faire de toute façon. La bonne chose à propos de mettre les données de GetData dans sa propre variable 'user' d'abord, c'est que vous pouvez vérifier le contenu de la variable' user' pendant le débogage. Vous ne pouvez pas le faire aussi facilement si vous passez la sortie de 'GetData()' directement dans votre méthode 'InsertIntoDatabase()'. –

+0

@Soo: L'ajout de la variable 'user' à votre code peut également faciliter la compréhension de ce qui se passe dans votre code, car cela permet au lecteur de votre code de savoir ce qui est passé. –