这是一个设计问题,我将尝试尽可能缩小范围以避免将其标记为开放式。
问题
需要一种有效的方法来设计一个或两个保存相同数据的类,但一个将数据字段作为加密字符串,第二个将它们作为解密字符串或整数。我收到加密的数据,我将其解密一次并允许我的应用程序使用解密的版本。
我所拥有的
我想出了不同的解决方案,但对其中任何一个都不满意。这是我尝试过的:
- 一个带有布尔标志 `encrypted` 的类,最初设置为 `true`,然后在数据解密后取消设置。缺点,相同的字段是多用的,即使有一个私有标志,听起来也不安全;另一个骗局,一旦解密,某些字段的类型就不同了,比如一个 ID,理想情况下,我希望解密的版本是正确的最终类型,这样就无法将新字段添加到同一个类中,这会使它变得混乱并且复杂化其他任务,如数据绑定等
- 想到了装饰器模式,但是它的工作方式是让装饰器和主题类实现相同的接口,但是解密后返回类型会有所不同
- 考虑有 2 个类,一个用于该类的解密版本,另一个用于加密。但是,在这种方法中放弃了代码重用,以解决让解密版本扩展加密版本并重用加密字段的 getter 的想法,这些字段在解密后不会更改类型,但更改类型的字段不能被覆盖
- 考虑过即使在解密后也以字符串格式保留数据,并在类之外转换为整数,但这是多余的,并且每当我需要使用类的整数字段时,都会用愚蠢的代码片段使我的代码混乱
关于如何解决这个设计问题的任何想法?