这是特定于Spring Boot的面向对象的设计问题。我正在扩展一个Spring Boot应用程序,该应用程序具有正在扩展并在另一个服务中使用的接口。该接口使用依赖项注入来选择实现。我不想改变那个。我认为继承设计对于Spring Boot来说是不错的选择,但是该接口并没有为我的实现提供必要的方法。我是否正在考虑装饰器模式,并在另一个界面中进行混合。要扩展的接口是...
public interface DataStrategyService {
DataRecord getEntityByPK(DataRecord dataRecord);
DataRecord getEntityByBK(DataRecord dataRecord);
void overwriteEntityByPK(DataRecord dataRecord);
void saveEntity(DataRecord dataRecord);
}
已经有一个已经可以实现的实现,并且对于这样的接口很有意义……
@Service
@ConditionalOnProperty(name="data.strategy", havingValue="KAFKA")
public class KafkaDataStrategyService implements DataStrategyService {
DataRecord getEntityByPK(DataRecord dataRecord{
//implementation stuff
}
DataRecord getEntityByBK(DataRecord dataRecord){
//implementation stuff
}
void overwriteEntityByPK(DataRecord dataRecord){
//implementation stuff
}
void saveEntity(DataRecord dataRecord){
//implementation stuff
}
}
但是该接口并没有提供我正在执行的实现所需的内容,因此我将像这样混合使用另一个Decorator ...
@Component
@ConditionalOnProperty(name="data.strategy", havingValue="CASSANDRA")
public interface ColumnFamilyDataStrategyDecorator {
Map<String, Object> insertEntity(DataRecord dataRecord);
Map<String, Object> deleteEntity(DataRecord dataRecord);
}
和将使用装饰器的类的具体类是...
@Service
@ConditionalOnProperty(name="data.strategy", havingValue="CASSANDRA")
public class ColumnFamilyDataStrategyService implements DataStrategyService, ColumnFamilyDataStrategyDecorator {
Map<String, Object> insertEntity(DataRecord dataRecord){
//implementation
}
Map<String, Object> deleteEntity(DataRecord dataRecord){
//implementation
}
DataRecord getEntityByPK(DataRecord dataRecord{
throw new UnsupportedOperationException("ColumnFamilyDataStrategyService.getEntityByPK() currently not supported.");
}
DataRecord getEntityByBK(DataRecord dataRecord){
throw new UnsupportedOperationException("ColumnFamilyDataStrategyService.getEntityByBK() currently not supported.");
}
void overwriteEntityByPK(DataRecord dataRecord){
throw new UnsupportedOperationException("ColumnFamilyDataStrategyService.overwriteEntityByPK() currently not supported.");
}
void saveEntity(DataRecord dataRecord){
throw new UnsupportedOperationException("ColumnFamilyDataStrategyService.saveEntity() currently not supported.");
}
}
如您所见,这里有一些UnsupportedOperationException
被抛出。看起来有点乱。但是,我真的不希望将Adapter模式与委托一起使用,因为那样我将无法按照作者的意图使用Spring依赖项注入。但另一方面,这些异常看起来很混乱。有什么建议吗?