空泡封装






4.43/5 (3投票s)
一种将数据源和实现更紧密结合的封装方法,允许以一种凡人可以理解的格式实现类似反射的行为。
在您谷歌搜索“Vacuole 封装”之前,让我向您介绍我完全凭空捏造的编程概念:Vacuole(液泡)。
我正在解决一个问题,即单个用户可能拥有 200 个相同的地址对象(每个美国州 4 个)。这种巨大的数据负载最终让我找到了一种解决方案,即使用 map 进行可移植的数据存储,从而共享相同的地址值,将这 200 个地址减少到仅 4 个。
虽然我觉得使用 map 增强数据存储是一种针对特定问题的利基解决方案,但它后来在验证和映射方面带来了一些令人惊喜的舒适协同效应。我开发了一些简单的实用工具,这些工具适用于实现 Vacuole 的任何值 bean。
空泡封装
Vacuole 封装与 封装 略有不同的方法。您仍然可以获得标准的封装访问器和修改器。但是,使用 Map 进行数据存储,并将 Vacuole 作为对象键。这种模式最重要的方面——Vacuole,包含 Bean 及其内容有效运行和蓬勃发展所需的一切,例如
- 唯一标识符(随机 UUID?)
- 分类(列名?用于比较类似值很有用)
- 契约(验证适配器)
- 数据类型(例如:类)
- 字段长度(< input maxlength = ” ? ” … />)
- 必填输入?(*)
- 或者您认为必要的任何其他内容
使用带有 Vacuole 键的 Map 处理数据,只需很少的代码,就可以使诸如验证、映射和比较之类的常规任务变得轻松,并且跟踪调用非常浅,并且没有反射。
案例示例
您需要从表单填充请求数据。当 Vacuole 的唯一标识符应用于表单元素的输入名称属性时,重新将每个表单变量输入与确切的 bean 结合起来很容易。以下是来自 Request
对象 Validate/BeanMapping 的示例
public class VacuoleUtils {
public static List<ValidationResult> handleRequest(HttpServletRequest req,
List<VacuoleBean> vBeans) {
List<ValidationResult> results = new ArrayList<>();
for (VacuoleBean vBean : vBeans) {
for (Vacuole v : vacuoleBean.getVacuoles()) {
for (Validator val : v.getValidations()) {
Object value = req.getParameter(v.getId());
ValidationResult result = val.check(value);
if (result.pass()) vBean.setValue(v,req.getParameter(v.getId()));
else results.add(result);
}
}
}
return results;
}
}
Vacuole 对我来说仍然是一种新奇事物,我期待着探索和发现这个小想法所蕴含的效用。
在得到 Keyhole 的祝福后,我希望能够在 Github 上提供一些源代码!在此之前,我建议您采用这些概念并独立应用它们。祝你好运!
– Ryan McCullough