gpt4 book ai didi

c# - 带有时间戳的对象修改设计模式

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:50 24 4
gpt4 key购买 nike

我有一个对象集合,需要为对象中某些属性的最后一次更新维护多个时间戳(每个属性一个时间戳)。

除了使用的反序列化库首先创建一个对象,然后更新其所有属性(使用对象的 setter )之外,我只会在 setter 中实现时间戳更新。这意味着每次我的程序反序列化它们时,我所有的时间戳都会失效。

我想我需要一个单例类或一些更新方法来处理更新属性并控制时间戳更新。有没有更好的方法来实现这种行为?这种行为是否存在设计模式?

最佳答案

如果您将序列化问题与业务层分开,应该可以帮助您灵活地敲定解决方案。让 99% 的 API 与您的业务对象一起工作(它在属性更新时更新时间戳),然后仅出于序列化目的与某些数据传输对象 (DTO) 相互转换/从某些数据传输对象 (DTO) 转换

例如,给定一些像这样的业务对象:

public class MyObject
{
public DateTime SomeValueUpdated { get; private set; }

private double _SomeValue;
public double SomeValue
{
get
{
return _SomeValue;
}
set
{
SomeValueUpdated = DateTime.Now;
_SomeValue = value;
}
}

public MyObject()
{

}

//for deserialization purposes only
public MyObject(double someValue, DateTime someValueUpdated)
{
this.SomeValue = someValue;
this.SomeValueUpdated = someValueUpdated;
}
}

你可以像这样有一个匹配的 DTO:

public class MyObjectDTO
{
public DateTime SomeValueUpdated { get; set; }
public double SomeValue { get; set; }
}

您的 DTO 可以用各种 XML 模式更改属性进行特殊装饰,或者您可以按照您认为合适的方式管理时间戳,而您的业务层不知道也不关心。

当需要序列化或反序列化对象时,通过转换器实用程序运行它们:

public static class MyObjectDTOConverter
{
public static MyObjectDTO ToSerializable(MyObject myObj)
{
return new MyObjectDTO {
SomeValue = myObj.SomeValue,
SomeValueUpdated = myObj.SomeValueUpdated
};
}

public static MyObject FromSerializable(MyObjectDTO myObjSerialized)
{
return new MyObject(
myObjSerialized.SomeValue,
myObjSerialized.SomeValueUpdated
);
}
}

如果您愿意,您可以将 MyObject 的任何属性或构造函数设为内部,这样只有您的转换实用程序可以访问它们。 (例如,您可能不想让 public MyObject(double someValue, DateTime someValueUpdated) 构造函数可公开访问)

关于c# - 带有时间戳的对象修改设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com