Bonjour à tous,
Je suis en pleine réflexion sur la manière de structurer mes classes et je me pose une question concernant la gestion des Id.
Tout d'abord comme il y a quelques particularités à prendre en compte je préfère vous présenter les squelettes de plusieurs classes destinées à stocker les données d'un graphe "classique" composé de noeuds et de segments (qui relient les noeuds).
J'ai pas mal de champs communs donc je prévois de faire de l’héritage pour les éléments 'Noeud' et 'Segment' à l'aide de la class BaseElement:
Noeud et Segment héritent de BaseElement. Remarquez que chaque noeud possède un Id de type Integer et chaque segment possède un Id de type String.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Public Class BaseElement Private _graphe As Graphe Private _Name As String .... etc End Class
La raison de l'Id de type string est que l'Id d'un segment est un réalité un Id combiné qui comprends les Ids d'un couple de noeuds. (Si Noeud1.Id=1 et Noeud2.Id=3 alors le segment qui les relient possède l'Id : segment.Id="1;3").
Pour les mêmes raisons que pour baseElement, je crée une classe de base qui servira pour les collections 'NoeudsCollection' et 'SegmentsCollection':
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Class Noeud Inherits BaseElement Public Property Id as Integer ... End Class Public Class Segment Inherits BaseElement Public Property Id as String ... End Class
Comme vous avez un œil avertie vous remarqueraient que j'utilise un System.collections.ReadOnlyCollectionBase
et enfin, les classes héritées 'NoeudsCollection' et 'SegmentsCollection'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Public MustInherit Class BaseCollection(Of T) Inherits ReadOnlyCollectionBase .... End Class
Je tiens à faire de l’héritage et un des problèmes que cela engendre est que je ne peut pas gérer de listes à clés à l’intérieur de Basecollection puisque les clés (Id) sont de 2 types différents...(je pourrais peut-être le faire dans les classes héritées en revanche).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Public Class NoeudsCollection Inherits BaseCollection(Of Noeud) End Class Public Class SegmentsCollection Inherits BaseCollection(Of Segment) End Class
Voici la question : Comme je ne gère pas de listes pour stocker les clées à l’intérieur des collections, est-ce qu'il y a un moyen pour retrouver un élément à partir de son Id ? La solution la plus simple serait de faire une boucle For each et tester l'Id mais j'ai peur que cela prennent du temps. L'idée est donc de retrouver un élément assez rapidement sans passer par une boucle For each ou autre méthode qui serait tout aussi longue.
J'aimerais beaucoup avoir votre aide sur ce petit problème qui me bloque pour avancer ou même une idée ou un avis.
Merci à vous.
Partager