对于显示产品信息的页面,我们必须从一组显示相同内容但具有不同格式(gif、png、jpg 等)、不同质量(jpeg 压缩)、不同的图像中选择最佳产品图像尺寸(缩略图,小,中,大)等。
选择取决于用户的浏览器、页面的当前大小、图像的用途等。
我们当前的解决方案是根据当前的需求构建一个 sql 查询,可能看起来像这样:
SELECT img.id
FROM img
WHERE img.format IN ('GIF','JPG')
AND img.width <= 1000
ORDER BY img.quality DESC
这是一个简单的例子,原来的例子要复杂得多。创建此语句的 java 代码使用了很多 if 和 case,并且开始变得非常难看。
在 Java 中实现这种启发式的最佳方法是什么?有没有图书馆可以提供帮助?也许沿着定义规则对象的路线:
Engine engine = new Engine();
engine.addRule(new IncludeRule("format", {"GIF", "JPG"}));//only gif and jpg
engine.addRule(new MaxRule("width", 1000));//max width
engine.addRule(new WeightedRule("quality", DESC));//go for high quality
Image result = engine.getResult();
我搜索了规则引擎,甚至有一个 JSR 和一些开源规则引擎,但它们似乎都是在处理商业规则。
我有强烈的感觉,我们正在重新发明轮子,而且我们根本找不到任何解决方案,因为我们不知道这些东西的正确名称;-)
任何帮助将不胜感激!