2010-03-07 20 views
1

J'écris un programme utilitaire avec C# WPF qui permet aux utilisateurs de créer des jeux de rôles, y compris les monstres, objets, personnages, etc.le stockage et les données programme de chargement, C# WPF

L'utilisateur va créer ou importez les éléments (monstres, etc.), puis utilisez les éléments importés pour créer des scénarios. Tout ce qui est utilisé par le programme est créé dans le programme, donc je n'ai pas de données prédéfinies auxquelles j'aurai accès.

Voici ma question - quelle est la meilleure façon de stocker et de charger les données?

Actuellement, j'utilise la sérialisation XML pour sérialiser les objets dans des fichiers XML et les recharger ultérieurement. C'est un peu maladroit, et je me demande si une base de données serait plus efficace - les données sont définitivement relationnelles (les monstres ont des objets, les cartes ont des monstres, etc.), et il pourrait y avoir des dizaines ou des centaines d'entrées.

Je n'ai pas besoin de lignes de code ou de méthodes à utiliser, juste une idée du type de stockage/récupération de fichiers qui serait habituellement utilisé dans cette situation (dans .NET).

Merci!

Répondre

1

Comme vous l'avez dit vous-même: Les données sont relationnelles, donc une base de données relationnelle va probablement aider. En utilisant Sql Server Compact vous pouvez avoir des fichiers simples, qui sont nommés comme vous voulez, que vous chargez dans Sql Server lors de l'ouverture. De cette façon, vous n'aurez pas à gérer un serveur de base de données traditionnel et l'utilisateur ne saura même pas qu'une base de données est impliquée.

Pour accéder aux données, je suis personnellement très friands de Linq-to-Sql, qui donne une interrogation de type sécurité directement en C#.

+0

Merci. Je pense que la principale raison pour laquelle j'ai hésité à utiliser une base de données est le souci de simplicité, cela me fait me sentir un peu mieux à ce sujet. – Joel

0

Base de données est la voie à suivre, définitivement. Utilisez an object-relational mapper pour parler à une base de données, cela couvrira probablement 99% de vos besoins au début.

Je préfère conserver la sérialisation XML pour les scénarios nécessitant une intercommunication de processus différente.

0

Cela dépend vraiment de ce que vous devez réaliser. Les bases de données ont une place, mais les fichiers plats sont également parfaitement bien pour les données (via la sérialisation).

Ainsi; quels problèmes le xml vous pose-t-il? Si vous pouvez répondre que, alors vous saurez quels sont les points de douleur que vous souhaitez aborder. Vous mentionnez "jeu", et en effet les fichiers plats tendent pour être plus approprié (en supposant que vous voulez minimum frais généraux etc), mais soit normalement ferait bien. La sérialisation binaire peut être plus efficace en termes de CPU et de disque (mais je ne recommande pas BinaryFormatter - cela vous mordra quand vous changerez les types).

Je ne suis pas contre -database (loin de là) - Je voulais juste présenter un point de vue équilibré ;-P

+0

Le principal problème que je reçois du XML est les références circulaires. Les éléments (comme les éléments du jeu) sont stockés dans des sources et stockent également une référence à la référence à la source d'où ils proviennent. Merci de donner d'autres options! – Joel

+0

@Joel - des choses comme DataContractSerializer/NetDataContractSerializer supportent le mode "graph", qui préserve les références d'objets (même circulaires). Je dois ajouter un mode graphique à pb-net ;-p –

0

Vous pouvez utiliser une base de données d'objets (comme db4o). Les avantages comprennent: sécurité de type, sans ORM, informations indexées ...