3 votes

Limiter la longueur d'une chaîne de caractères sur une propriété

Cette question est apparue alors que j'essayais de comprendre un problème plus vaste que, par souci de simplicité, j'omets.

Je dois représenter une certaine structure de données en C#. C'est un protocole qui sera utilisé pour communiquer avec un système externe. En tant que tel, il comporte une séquence de chaînes de caractères avec des longueurs prédéfinies et des nombres entiers (ou d'autres données plus complexes). Supposons :

SYSTEM : four chars
APPLICATION : eight chars
ID : four-byte integer

Maintenant, ma façon préférée de représenter ceci serait d'utiliser des chaînes de caractères, donc

class Message
{
    string System {get; set; };      // four characters only!
    string Application {get; set; }; // eight chars
    int Id {get; set; };
}

Le problème est que je dois m'assurer que la chaîne ne dépasse pas la longueur prédéfinie. De plus, cet en-tête aura en fait des dizaines de champs, qui changeront de temps en temps (nous sommes encore en train de décider de la mise en page du message).

Quelle est la meilleure façon de décrire une telle structure ? Je pensais, par exemple, utiliser un XML avec la description des données et utiliser la réflexion afin de créer une classe qui adhère à l'implémentation (puisque j'ai besoin d'y accéder de manière programmatique).

Et, comme je l'ai dit, il y a plus de problèmes. J'ai d'autres types de données qui limitent le nombre de caractères/chiffres...

8voto

Michael Madsen Points 30610

Pour commencer : le problème de la longueur. Il est facile de le résoudre en n'utilisant pas les propriétés automatiques, mais en déclarant votre propre champ et en écrivant la propriété à l'ancienne. Vous pouvez ensuite valider votre exigence dans le setter, et lever une exception ou rejeter la nouvelle valeur si elle n'est pas valide.

Pour la structure changeante : S'il n'est pas possible de modifier la classe, vous pouvez écrire une solution qui utilise un dictionnaire (peut-être un par type de données que vous voulez stocker) pour associer un nom à une valeur. Ajoutez une sorte de fichier (peut-être XML) qui décrit les champs autorisés, leur type et les exigences de validation.

Cependant, s'il s'agit simplement de changer parce que vous n'avez pas encore décidé de la structure finale, je préférerais probablement changer la classe - si vous n'avez pas besoin de ce genre de structure dynamique lorsque vous déployez votre application, cela semble être une perte de temps, puisque vous finirez probablement par passer plus de temps à écrire les éléments dynamiques qu'à modifier la classe.

1voto

Vous pouvez trouver ceci poste utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X