Java Optionals - 便利与合同

时间:2017-01-24 15:50:26

标签: java data-modeling optional

上下文
我们有一项服务接受实体的POST提交。让我们称之为实体E.实体可以具有各种属性--A,B,C,D。让我们说属性A是实体E的主键。 当服务收到提交时,提交不需要完成,即它不需要存在除主键A之外的所有属性。如果我们的数据存储中已经有一个对应于A的对象,我们获取该对象,覆盖存储具有提交属性值的属性值并再次保留。如果我们没有存储与A对应的对象,我们会应用一些默认逻辑,并在将该对象持久保存到数据存储之前将缺省值应用于缺少的属性。 因此,行为的差异在于提交可能存在或可能不存在某些属性,但是一旦存储该对象,所有属性将始终存在。

问题: 在数据建模方面,我有两个选项如下所述。我想了解建议这种行为的推荐方法和原因。 :

选项1:两个接口将Optional视为合同:

 interface EntitySubmission { 
    A getA(); // Since this is a primary key it will always be present 
    Optional<B> getB(); 
    Optional<C> getC(); 
    Optional<D> getD(); 
    }

interface EntityPersisted { 
// No attribute will ever be missing or null 
A getA(); 
B getB(); 
C getC(); 
D getD(); 
} 

选项2 :单一统一界面处理可选方便:

interface Entity { 
A getA(); 
Optional<B> getB(); 
Optional<C> getC(); 
Optional<D> getD(); 
}

注意:请注意,选项1的目的是澄清对于EntityPersisted类型的对象,不会丢失任何属性或null的期望。

编辑:我认为这个问题的核心在可选辩论中丢失了。我的问题的核心是我是否应该声明单独的接口来传达单独的期望(Nullable vs NonNull)或者是否有一个统一的接口允许可以为空的非关键属性?

0 个答案:

没有答案