【发布时间】:2015-07-17 16:18:02
【问题描述】:
这里解释了设计模式: http://www.tutorialspoint.com/design_pattern/filter_pattern.htm
我正在开发一款与 Adobe Lightroom 或 ACDSee 非常相似但用途不同的软件。用户(摄影师)能够从他的硬盘中导入数千张图像(拥有超过 100k/200k 的图像并不奇怪)。
我们有一个侧面板,用户可以在其中创建自定义“过滤器”,其表达式如下:
Does contain the keyword: "car"
AND
Does not contain the keyword "woods"
AND
(
Camera model is "Nikon D300s"
OR
Camera model is "Canon 7D Mark II"
)
AND
NOT
Directory is "C:\today_pictures"
你可以从上面的例子中得到这个想法。
我们有一个存储所有图像信息的 SQLite 数据库。问题是,我们是否应该在第一次加载程序时将所有照片对象从数据库加载到内存中,并按照上面引用的网站中的说明实现 Criteria/Filter 设计模式,以便我们的 Criteria 类过滤对象或者更好地执行标准类实际上会生成一个最终执行的 SQL 查询,以便仅从数据库中检索需要的内容?
我们正在使用 C++ (QT) 开发程序。
【问题讨论】:
-
您是说用户通常拥有最多 Nk 个项目,N 没有上限。为什么您认为从数据库加载所有项目然后使用过滤器可能更可取对定义明确的查询的解决方案?
-
我想会有一个限制,也许是 500k...
-
不,我只是在问正常的事情是将所有内容加载到内存中还是应该使用某种缓存?但我的问题实际上来自于在我提供的链接中看到过滤器/标准模式的实现......他们检查内存对象以返回结果集...... .
-
我的背景是非常低级的编程,所以这对我来说并不清楚什么是最好的解决方案,我希望人们能指出想法以及这个实现可能有什么好的解决方案。
标签: c++ qt sqlite design-patterns design-principles