当前位置:  开发笔记 > 程序员 > 正文

实现"脏"标志功能的不同方法

如何解决《实现"脏"标志功能的不同方法》经验,为你挑选了5个好方法。

几乎每个程序员一生都做过一次:如果变量的值发生变化,设置一些标志.总有很多属性,如果有变化,你想跟踪

    在任何财产

    在特定的财产

    或者在一些属性中

除了在每次属性更改时更新的标准对象范围脏标志之外,我对以上情况实现"脏标志"功能的不同方式感兴趣.必须有比在每个二传手中加入"dirty = true"更好的东西:它看起来很丑陋而且是一项繁琐的工作.



1> Otávio Décio..:

对于我的DAO,我保留了从数据库中检索到的原始值的副本.当我发送它进行更新时,我只是将原始值与当前值进行比较.它的处理成本稍高,但比每个属性的脏标志要好得多.

编辑以进一步证明没有脏标志:如果属性返回其原始值,则没有办法反映出来,脏标志继续变脏,因为原始值丢失了.


如果你真的想到它,我不一定在内存中保留更多的数据,因为我不需要为每个属性携带状态标志.如果值返回到原始值,我不需要担心将其设置为"未更改".脏标志也不允许我回去.
@Allen - 我会跟踪每个属性,因此我不会在update语句中包含已更改和还原的属性.它不是很多工作或很多变量,它是同一个对象的单独实例.

2> Bertvan..:

我曾经有一个基本的Entity类,提供Dirty/Removed Logic.

在编写实体子类时,您可以执行以下操作:

public string Name
{
    get { return name; }
    set { setValue("Name", value); }
}

这很好,但有"丑陋的字符串"疾病......

今天,您可以使用Lambda表达式排除字符串:

set {setValue(x => x.Name, value);}

或者,我认为这是最好的解决方案,你可以使用AOP:

https://www.postsharp.net/

这样,您可以按属性定义操作.您创建一个属性并指定当用户更改关联属性时,该实体变脏.

此外,您可以在类(基本实体)中保留属性列表,该列表将记住更改的属性,并从AOP代码访问该列表.



3> pezi_pink_sq..:

我创建了一个名为的类DirtyValue ,它具有原始值和当前值.首次使用时,它会设置原始值和当前值.连续调用仅设置当前值.

您可以通过比较两者来判断它是否已更改,并使用名为IsDirty()的只读bool属性.使用此技术,您还可以访问原始值.



4> dwc..:

如果你设置一个"脏"标志意识到你保持状态.在某些时候,您需要根据该状态采取行动,否则您不需要保留该标志.那么问题就变成了:是否还有另一种触发所需行动的方法?发送某种消息?谁消耗"脏"状态并采取行动,是否有更清晰的通知接口?



5> AShelly..:

在某些具有数据写入器任务和独立读取器任务的情况下,我给每个任务一个updateCount变量.生成器在写入时递增其计数.每当读者醒来并发现其计数小于生产者的计数时,它会使用当前值进行更新.您需要对计数器溢出进行一些特殊处理,但实现起来非常简单.

我已经成功地应用于模拟这项技术 - 其中生成器是物理环路和读者在3D显示器.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有