我有一个简单的现实生活问题,我想使用 OO 方法来解决。我的硬盘一团糟。我有 1.500.000 个文件、重复文件、完整的重复文件夹等等......
当然,第一步是将所有文件解析到我的数据库中。到目前为止没有问题,现在我得到了很多不错的条目,它们是“自然分组”的。可以使用简单的查询来获得这种简单分组的示例,例如:
- 给我所有大于 100MB 的文件
- 显示所有超过 3 天的文件
- 获取所有以 docx 结尾的文件
但是现在假设我想找到具有更自然意义的组。对此有不同的策略,具体取决于“用例”。
假设我有一个坏习惯,将所有下载的文件首先放在桌面上。然后我将它们解压缩到适当的文件夹,而不总是删除 ZIP 文件。我将它们移到“阁楼”文件夹中。对于系统而言,要找到这组文件,一种面向时间的搜索方法,也许结合“检查 ZIP 是否相同然后文件夹 X”将是合适的。
假设另一个复制文件的坏习惯,有一些“干净文件”位于结构良好的文件夹,以及另一个凌乱的文件夹。现在我的干净文件夹有 20 个图片库,我凌乱的文件夹有 5 个重复的和 1 个新的画廊。人类用户可以通过看到“哦,这都是重复的,那是一个新的,所以我将新的放在干净的文件夹中并丢弃所有重复的”来轻松识别此逻辑。
所以,现在进入正题:
您将使用哪种策略或模式组合来解决这种情况。如果我链接过滤器,“最难”的将获胜,我不知道如何让系统“测试”合适的组合。在我看来,这不仅仅是过滤。其动态分组通过组合多个标准来找到“最佳”组。
一种非常粗略的方法是:
- 一开始,所有文件都是平等的
- 第一个,不是那么“好”的组是目录
- 如果您是一个大而干净的目录,您可以获得积分(均匀分布的名称)
- 如果所有文件的创建日期相同,您可能会被“自动创建”
- 如果你是 Program-Files 的孩子,我根本不在乎你
- 如果我将 A 组的你移到 C 组,这会提高“熵”吗
适合这种情况的最佳模式是什么。策略,过滤器和管道,“分组”.. 欢迎任何评论!
编辑以回应答案:
标记方法: 当然,我想到了标记。但是我在哪里画线。我可以创建不同的标签类型,例如 InDirTag、CreatedOnDayXTag、TopicZTag、AuthorPTag。这些标签可以按层次结构构建,但如何分组的问题仍然存在。但我会考虑一下并在这里添加我的见解..
拖延评论: 是的,听起来是这样。但这些文件只是我能想到的最简单的例子(也是目前最相关的例子)。它实际上是以动态方式对相关数据进行分组的大局的一部分。也许我应该保持更抽象,强调这一点:我不是在寻找文件标记工具或搜索引擎,而是解决这个问题的算法或模式......(或者更好的想法,比如标记)
克里斯