【发布时间】:2015-12-15 10:27:01
【问题描述】:
我想知道如何在以下示例中最好地分离职责。
有一个Foo 对象,它有一些id 和一些reallySecretImportantData 字段。 Id 是用于引用对象的简单标识符,而reallySecretImportantData 是应该在数据库中加密的数据,因为数据库是本示例中唯一的漏洞点。
现在,如果我们有一个带有方法 void storeFoo(Foo foo) 和 Foo readFoo(Id id) 的 FooService。
我们还有一个 FooRepository,它具有标准 CRUD 方法,可将 Foo 对象存储在数据库中。
现在,由于我想加密保存reallySecretImportantData,我必须在某处加密并在某处解密。
由于FooRepositorys 的职责不应该包括加密操作,逻辑位置是FooService。
现在,如果我在某个开发环境中,出于开发和测试目的,我希望将 reallySecretImportantData 保存为纯文本。
如果我使用某种 DI,我可以编写我的服务的 2 个实现,一个用于生产,另一个用于开发/测试,只需将 DI 配置为在生产环境中使用产品,在开发和测试环境中使用开发/测试。
现在,如果在不久的将来出现更改 reallySecretImportantData 存储方式的请求,我可以简单地编写该服务的另一个实现并使用我的 DI 框架注入它。
这个简单的设计对于当前的模型案例是否足够好?
【问题讨论】:
标签: java oop encryption single-responsibility-principle