Question

J'essaie de corriger un défaut de conception que j'ai récemment rencontré dans certains de nos logiciels sans avoir à tout réécrire. Il y a un fichier .exe qui a un fil d'écoute de messages qui reçoit des données d'un serveur, puis l'écrit dans une classe dans une DLL séparée (nous l'appellerons StaticDataClass) qui stocke toutes les données qu'il reçoit (principalement des fichiers statiques). tiré d'une base de données au démarrage). Cette classe fournit également des méthodes que d'autres classes peuvent utiliser pour récupérer les données. Le problème est que les méthodes store (set) sont toutes publiques, donc toute autre classe peut écraser ces données et casser l’application tout entière. Quel est le bon moyen pour moi de protéger les données (rendre les méthodes set / store invisibles) contre tous les objets, à l'exception de ceux contenus dans l'exécutable lui-même?

Pour le moment, je joue avec une interface qui ne définit que les accesseurs publics. Ensuite, une classe singleton implémente cette interface, puis la propriété Instance renvoie le type d'interface afin qu'ils ne puissent utiliser que les méthodes get déclarées. dans l'interface. Mais au démarrage de l’exécutable, il obtiendra une référence réelle à l’objet StaticDataClass et non au type d’interface. Il pourra donc également appeler les méthodes store / set.

Ceci n’est pas une preuve totalement complète, mais empêche un développeur qui ne connaît pas bien le système de penser qu’il est correct d’utiliser ces méthodes de stockage publiques car Visual Studio intellitype les rend visibles lorsqu’elles codent. Au lieu de cela, ils devront essayer de le casser en définissant l'objet comme le type contenant les méthodes de stockage.

Existe-t-il une méthode plus propre pour le faire?

Était-ce utile?

La solution

Vous pouvez rendre les méthodes définies internes et utiliser InternalsVisibleToAttribute pour accorder l'accès à l'exécutable préféré.

Autres conseils

Je suis d'accord. Rendre les éléments internes visibles à l'assembly de confiance semble être le moyen le plus simple de réaliser ce que vous voulez faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top