小编Chr*_*ian的帖子

使用多个条件对项目进行分组的最佳通用策略

我想用OO方法解决一个简单的现实问题.我的硬盘很乱.我有1.500.000文件,重复文件,完整的重复文件夹,等等...

当然,第一步是将所有文件解析到我的数据库中.到目前为止没有问题,现在我有很多很好的条目,有点"自然分组".可以使用以下简单查询获得此简单分组的示例:

  1. 给我所有大于100MB的文件
  2. 显示超过3天的所有文件
  3. 找到所有以docx结尾的文件

但现在假设我想找到一些具有更自然意义的群体.根据"用例",有不同的策略.

假设我养成了将所有下载的文件放在桌面上的坏习惯.然后我将它们提取到适当的文件夹,而不是总是删除ZIP文件.我将它们移动到"阁楼"文件夹中.对于系统,要找到这组文件的时间导向搜索方法,可能与"检查ZIP是否相同然后文件夹X"相结合是合适的.

假设另一个重复文件的坏习惯,有一些文件夹,其中"干净的文件"位于一个漂亮的结构中,另一个文件夹是杂乱的.现在我的干净文件夹有20个图片库,我的杂乱文件夹有5个重复和1个新图库.一个人类用户可以通过看到"哦,那些只是重复,这是一个新的,所以我把新的一个放在干净的文件夹中并删除所有重复"来轻松识别这个逻辑.

所以,现在要谈到这一点:

您将使用哪种策略或模式组合来解决这种情况.如果我链式过滤器,"最难"将获胜,我不知道如何让系统"测试"合适的组合.它告诉我,它只是过滤.它通过组合多个标准来动态分组,以找到"最佳"组.

一个非常粗略的方法是:

  1. 一开始,所有文件都是相同的
  2. 第一个,不是那么"好"的组是目录
  3. 如果你是一个大而干净的目录,你可以获得积分(均匀分布的名字)
  4. 如果所有文件具有相同的创建日期,您可能会"自动处理"
  5. 如果你是Program-Files的孩子,我根本不关心你
  6. 如果我移动你,A组,进入C组,这将改善"熵"

适合这种情况的最佳模式是什么?战略,过滤器和管道,"分组"..欢迎任何评论!

在重新开始回答时编辑:

标记方法: 当然,标记克服了我的想法.但是我在哪里画线.我可以创建不同的标签类型,如InDirTag,CreatedOnDayXTag,TopicZTag,AuthorPTag.这些标签可以用hirarchy结构化,但是如何分组的问题仍然存在.但我会给出一些想法,并在此添加我的见解..

拖延评论: 是的,听起来像那样.但文件只是我能想到的最简单的例子(目前最相关).它实际上是以动态方式对相关数据进行分组的更大图景的一部分.也许我应该保持它更抽象,强调这一点:我不是在寻找文件标记工具或搜索引擎,而是一种算法或模式来解决这个问题...(或者更好的是,想法,比如标记)

克里斯

directory-structure file

7
推荐指数
2
解决办法
383
查看次数

结合NHibnernate的Fluent和XML映射

我刚刚爱上了NHibernate和流畅的界面.后者支持非常好的映射和重构支持(不再需要xml文件).

但没有人是完美的,所以我错过了流利的多对多映射.有人知道它是否已经存在吗?如果是这样,一行简单的代码就会很好.

但要坚持问题的标题,有没有办法结合流畅和正常的NHibernate映射.

目前我使用以下行进行我的测试设置WITH Fluent,以及第二个代码块用于我的测试WITHOUT流畅(使用XML映射).如何判断流利使用流畅的IF AVAILABLE和XML否则......

        var cfg = new Configuration();
        cfg.AddProperties(MsSqlConfiguration.MsSql2005.ConnectionString.Is(_testConnectionstring).ToProperties());
        cfg.AddMappingsFromAssembly(typeof(CatMap).Assembly);
        new SchemaExport(cfg).Create(true, true);

        var persistenceModel = new PersistenceModel();
        persistenceModel.addMappingsFromAssembly(typeof(CatMap).Assembly);
        IDictionary<string, string> properties = MsSqlConfiguration.MsSql2005.UseOuterJoin().ShowSql().ConnectionString.Is(_testConnectionstring).ToProperties();
        properties.Add("command_timeout", "340");

        session = new SessionSource(properties, persistenceModel).CreateSession();
Run Code Online (Sandbox Code Playgroud)

没有流利......

        config = new Configuration();
        IDictionary props = new Hashtable();

        props["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider";
        props["dialect"] = "NHibernate.Dialect.MsSql2005Dialect";
        props["connection.driver_class"] = "NHibernate.Driver.SqlClientDriver";
        props["connection.connection_string"] = "Server=localhost;initial catalog=Debug;Integrated Security=SSPI";
        props["show_sql"] = "true";
        foreach (DictionaryEntry de in props)
        {
            config.SetProperty(de.Key.ToString(), de.Value.ToString());
        }
        config.AddAssembly(typeof(CatMap).Assembly);

        SchemaExport se = new SchemaExport(config);
        se.Create(true, true);

        factory = …
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent-interface fluent

5
推荐指数
1
解决办法
3658
查看次数