À l'aide d'un statique jeu de données comme source de données
Dans mon application j'ai un DataSet qui contient les tables qui sont utilisés dans différentes formes, toutes plus mon application.
Pour être en mesure de maintenir la simultanéité entre les formes, et de ne pas avoir à obtenir des données de la base de données chaque fois que l'utilisateur ouvre un nouveau formulaire, je tiens mon jeu de données dans un champ statique dans le programme de la classe comme ceci:
static class Program
{
public static CustomDataSet StockDataSet { get; private set; }
[STAThread]
static void Main()
{
StockDataSet = new Database.CustomDataSet();
StockDataSet.InitRelations();
StockDataSet.EnforceConstraints = false;
StockDataSet.Categories.Fill();
StockDataSet.Suppliers.Fill();
StockDataSet.StockItems.Fill();
StockDataSet.EnforceConstraints = true;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainWindow());
}
De ce fait, il est assez facile à utiliser le jeu de données par programmation. De travail dans la conception-temps, cependant, provoque beaucoup de frustration. Par exemple; j'ai un formulaire avec un DataGridView lié à un BindingSource. Si je veux être en mesure de travailler avec les colonnes de la DataGridView dans la conception, je doit avoir un objet de mon DataSet personnalisé accessible à la BindingSource dans la InitializeComponent.
Toutes les solutions de contournement pour ce que je pense sont assez moches, hacks.
Comme à l'aide d'un objet factice dans Designer.cs de garder le design-temps heureux, et attribuer à l'objet statique du champ de la tenue de l'objet fictif. Et après réinitialisation de toutes les liaisons dans le constructeur. Cela doit être considéré comme très mauvaise pratique, non?
Donc ma question est: est-ce n'est-il pas plus élégant, ou, au moins, l'approche pratique de la ce?
Ou est-il suggéré de meilleures pratiques pour travailler avec des ensembles de données dans de multiples formes?
Modifier
Stock se réfère à la gestion de stock comme dans l'inventaire. Pas de lourd traitement est effectué sur les données, qui est conservé sur une base de données MySql-base de données sur un serveur local.
- J'espère vraiment que vous n'en fais pas de filetage - pur chaos avec un statique dataset
- Nope, pas de filetage. Heureusement
Vous devez vous connecter pour publier un commentaire.
L'affichage d'une source de données lors de l'exécution, et d'autres au moment de la Conception n'est pas laid du tout. Je pense que vous vous battez avec est assez fréquent lors de l'utilisation de tables de données, bases de données, et DataGridViews et le concepteur. C'est un excellent outil si travaillez avec de très simple Maître/Détail des formes et ne veulent pas sortir de la norme des comportements.
Dans le scénario que vous avez décrit, vous souhaitez modifier l'usage normal de ces éléments de sorte que vous pouvez pré-charger les données lorsque l'application démarre. Comme vous l'avez constaté, ce qui provoque un peu de problème que vous avez à gérer sur votre propre. La partie de traitement de cette question est la réinitialisation de la source de données à une nouvelle valeur au moment de l'exécution. Ce n'est pas inélégant ou mauvaise pratique à tous.
Toutefois, lorsque vous commencez à parler de faux, et la mise en cache en raison de problèmes de performances, je me demande si vous voulez vraiment une base de données à tous. Il semble que vous êtes à la recherche pour développer un modèle (à l'aide de C# objets) que vous pouvez lier à, mettre à jour et de sérialiser en tant que de besoin. Alors que je ne suis pas sûr que c'est vrai pour votre conception, si elle était ma conception (avec mon peu de compréhension de votre problème) c'est ce que j'allais faire. Une base de données ne serait pas une grosse part de mon projet à ce stade, si tout. Je voudrais construire des objets C# qui représentent mes tables, un modèle de classe pour gérer ces éléments, et une usine pour instancier le modèle et gérer sa durée de vie.
Si, à un certain moment, je avait de sérialiser/interagir/avec une base de données, je voudrais construire que dans le modèle.
Une grande question pour moi en ce qui concerne l'élégance, c'est comment je test tout cela? Si je suis de liaison au moment de la conception, et en s'appuyant sur une statique à charge au moment de l'exécution, puis mon design m'a bloqué toute sorte d'unité, ou en fonction des classes de tests d'intégration. Si j'avais séparé de la base de données des trucs dans un modèle, alors je l'ai séparé la préoccupation de la gestion des données dans une classe que je pouvais coller une interface, ce qui me donne quelque chose de faux ou de la maquette et le talon.
J'irais avec l'idée d'utiliser un objet factice dans le Concepteur.cs, mais le commentaire de la section appropriée à l'aide de la compilation conditionnelle (c'est à dire #if DEBUG)
Essayez d'utiliser un modèle de conception singleton.
L'utiliser comme ceci: