使用查找表时保持代码可读 - 性能与可维护性

时间:2013-12-11 14:21:39

标签: enums lookup

使用GUID主键在可能的事件类型存储在数据库的查找表中的审计系统上工作。由于各种原因,它们必须保存在数据库中,而不是存储在枚举或类似的东西中。

目前,在任务中期,我的代码中充满了如下所示的位:

if (currentLp.PercentageShare != lp.PercentageShare)
{
    //percentage change audit
    DiaryEvent de = RepositoryHelper.AuditEvent(lp.CilCase_Id, new Guid("56900C62-3164-4111-BAEC-4F102FEF5813"));
    _cilUpdateContext.DiaryEvents.Add(de);
}

这个问题显而易见 - 我知道那个特定的Guid映射到名为“Percentage Share Changed”的类型,但除了我的一次性评论之外,其他人不会进入代码。

我可以想到两个解决这个问题的方法。

第一种是使用描述性字段从代码中查询数据库以获取Guid,但这是一个很大的性能影响,因为这将会发生很多。

第二种是在类中设置一个Guid / String Dictionary,它映射到查找表中的值,并使用它来获取Guids。但这是一个很大的可维护性,因为它们的类型列表偶尔会发生变化,并且系统中的任何人都需要记住以确保两者保持同步。

哪个是较小的邪恶?还是有另一种解决方案吗?

1 个答案:

答案 0 :(得分:1)

为什么你不结合两种方法?

  • 启动时,将Db中的Name / Guid对读入内存表
  • 然后在那里查看
  • 如果需要,请执行一个任务信号,重新读取Db表,以便进行在线更新。

但是应该避免更新(=意义的改变)。嘿,这是一个Guid,它已经是独特的了,所以只有你添加新的审计事件,才有必要再次调查Db:

  • 或者代替信号,如果你没有在内存表中找到Guid,只需再看一遍Db。

它将速度与Db灵活性结合在一起。

BR Florian