2009-10-22 3 views
0

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

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

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

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

ответ

4

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

+0

Похоже, у него есть потенциал, я попробую. Благодарю. – alexD

+0

Похоже, что это работает ... это проще, чем любое решение, на которое я надеялся! – alexD

0

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