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:
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
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.
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").
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
Pour les mêmes raisons que pour baseElement, je crée une classe de base qui servira pour les collections 'NoeudsCollection' et 'SegmentsCollection':
Comme vous avez un œil avertie vous remarqueraient que j'utilise un System.collections.ReadOnlyCollectionBase
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Public MustInherit Class BaseCollection(Of T)
        Inherits ReadOnlyCollectionBase
....
End Class
et enfin, les classes héritées 'NoeudsCollection' et 'SegmentsCollection'
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
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).

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.