我有一团传入数据(假设它是一个JSON对象),我需要使用此原始数据提取一些字段。例如,使用伪代码:
int user_id_field = data['user_id'] as int;
string user_name_field = data['user_name'] as string;
但是,某些字段更为复杂,实际上取决于其他字段。例如,遵循上面的代码片段:
// async operation
UserProfile user_profile = await db.get_user_profile(user_id_field);
string user_locale_field = user_profile.get_locale();
int user_age_field = user_profile.get_age();
我试图通过将每个字段的提取逻辑放入其自己的类中来对设计进行模块化,以便可以执行以下操作:
interface Extractor<T> {
public static async T extract(JSON data);
}
class UserIdExtractor extends Extractor<int> { ... }
...
fields = await all (
UserIdExtractor::extract(data),
UserNameExtractor::extract(data),
UserLocaleExtractor::extract(data),
UserAgeExtractor::extract(data),
);
但是,这将导致在UserLocaleExtractor
和UserAgeExtractor
中重复计算用户配置文件。即使我添加了额外的UserProfileExtractor
,我也无法想到一种干净的方法将一个提取器的结果提供给其他提取器的输入。
这种情况是否有共同的模式?