Как вы скрываете данные от всех, кроме одного класса? - PullRequest
0 голосов
/ 23 октября 2009

Я пытаюсь исправить недостаток дизайна, с которым я недавно столкнулся в некоторых наших программах, не переписывая его полностью. Существует .exe, который имеет поток прослушивателя сообщений, который получает данные с какого-либо сервера, а затем записывает их в класс в отдельной DLL (назовем его StaticDataClass), в котором хранятся все полученные данные (в основном статические). вытащил из базы данных при запуске). Этот класс также предоставляет методы, которые другие классы могут использовать для получения данных. Проблема в том, что все методы store (set) являются общедоступными, поэтому любой другой класс может перезаписать эти данные и нарушить работу всего приложения. Каков хороший способ защитить данные (сделать методы set / store невидимыми) для всех объектов, кроме тех, которые содержатся в самом исполняемом файле?

Сейчас я играю с интерфейсом, который определяет только общедоступные методы получения, а затем реализую этот интерфейс с помощью одноэлементного класса, а затем свойство Instance вернет тип интерфейса, чтобы они могли использовать только объявленные методы get. в интерфейсе. Но когда исполняемый файл запускается, он каким-то образом получает фактическую ссылку на объект StaticDataClass, а не тип интерфейса, поэтому он также сможет вызывать методы store / set.

Это не полностью полное доказательство, но оно не позволяет некоторым разработчикам, которые не знакомы с системой, думать, что можно использовать эти общедоступные методы хранения, потому что intellitype в Visual Studio делает их видимыми при кодировании. Вместо этого им придется попытаться сломать его, приведя объект к типу, который содержит методы хранилища.

Есть ли более чистый способ сделать это?

Ответы [ 2 ]

4 голосов
/ 23 октября 2009

Вы можете сделать методы set внутренними и использовать InternalsVisibleToAttribute для предоставления доступа к привилегированному исполняемому файлу.

0 голосов
/ 23 октября 2009

Я согласен - сделать внутренние элементы видимыми для доверенной сборки - это самый простой способ достичь того, чего вы хотите.

...