使用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。但这是一个很大的可维护性,因为它们的类型列表偶尔会发生变化,并且系统中的任何人都需要记住以确保两者保持同步。
哪个是较小的邪恶?还是有另一种解决方案吗?
答案 0 :(得分:1)
为什么你不结合两种方法?
但是应该避免更新(=意义的改变)。嘿,这是一个Guid,它已经是独特的了,所以只有你添加新的审计事件,才有必要再次调查Db:
它将速度与Db灵活性结合在一起。
BR Florian