除了一次课外,你如何隐藏所有数据?

时间:2009-10-22 21:04:52

标签: c# interface information-hiding

我正在尝试修复我最近在某些软件中遇到的设计缺陷,而没有重写整个事情。有一个.exe,它有一个消息监听器线程,它从一些服务器接收数据,然后将它写入一个单独的DLL(我们称之为StaticDataClass)中的一个类,该DLL存储它接收的所有数据(大多数是静态的)在启动时从数据库中提取)。此类还提供了其他类可用于检索数据的方法。问题是store(set)方法都是公共的,因此任何其他类都可以覆盖这些数据并破坏整个应用程序。除了可执行文件本身包含的对象之外,对我来说保护数据(使set / store方法不可见)的好方法是什么?

现在我正在玩一个只定义公共getter的接口,然后让一个singleton类实现该接口,然后Instance属性将返回接口类型,这样他们只能使用声明的get方法在界面中。但是当可执行文件启动时,它会以某种方式获得对StaticDataClass对象的实际引用而不是接口类型,因此它也可以调用store / set方法。

这并非完全证明,但是它阻止了一些不熟悉系统的开发人员认为可以使用这些公共存储方法,因为Visual Studio intellitype在编码时可以看到它们。相反,他们必须通过将对象转换为包含存储方法的类型来尝试打破它。

有更简洁的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以将set方法设置为internal,并使用InternalsVisibleToAttribute来授予对喜欢的可执行文件的访问权。

答案 1 :(得分:0)

我同意 - 让可信组件可见内部听起来像是实现你想要做的最简单的方法。