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