我正在研究一个工具,用户可以使用他们自己的注释来描述数据处理工作流程(如验证,转换等)。API设计:一个通用接口VS三个专用接口?
除了使用现成的使用注释,用户可以用户自己:为了做到这一点,他们需要声明注释类本身,然后实现注解处理器(< --IT是这个问题的要点actualy) 。
用于数据处理的配置的方法可以是这样的一种:
void foo(@Provide("dataId") @Validate(Validator.class) String str) {
doSmth(str);
}
有很自然三组注解:
- 那些产生的初始值;
- 转换值(转换器);
- 那些只读取值和执行一些工作(验证者,不同的消费者)的人。
所以我需要做的choise:可以创建一个接口,用于处理所有这些类型的注解,它可以象这样:
interface GenericAnnotationProcessor {
Object processAnnotation(Annotation annotation, Object processedValue);
}
或者,我可以添加3个intefaces的API:
interface ProducerAnnotationProcessor {
Object produceInitValue(Annotation annotation);
}
interface TransformerAnnotationProcessor {
Object transformValue(Annotation annotation, Object currentValue);
}
interface ConsumerAnnotationProcessor {
void consumeValue(Annotation annotation, Object currentValue);
}
第一个选项在使用中不是很明确,但第三个选项使用3个几乎相似的接口污染API。
你会选择什么(首先作为API用户),为什么?
谢谢!