gpt4 book ai didi

c# - 我可以从数据源创建和反对 "self-loads"属性吗?

转载 作者:行者123 更新时间:2023-11-30 17:25:42 25 4
gpt4 key购买 nike

我有一个设计模式问题,希望您能帮助我。

我有一个 C# 应用程序,它将对象作为 JSON 存储在数据库中。目前,一个专门的类处理加载 JSON、反序列化和返回对象。这很好用,但我想知道是否有一种方法可以让对象“自加载”(因为缺少更好的术语)。

我现在做的是(简写代码):

public class MyObject {
public string Name;
public string Rank;
public int SerialNo;
}

public class DataTransport{
public MyObject LoadMyObject(string ObjectId){
string ObjectJSON = fetch.from.database;
return ObjectJSON.deserialize.object;
}
}

DataTransport dt = new DataTransport();
MyObject mo = dt.LoadMyObject("object123");

我想做的是:

public class MyObject {
public string Name;
public string Rank;
public int SerialNo;
public MyObject(string ObjectId){
DataTransport dt = new DataTransport();
this = dt.LoadMyObject(ObjectId);
}
}

MyObject mo = new MyObject("object123);

显然这失败了,但是有没有类似的机制让构造函数用从数据库加载的对象替换自己?

我考虑过在实例化时加载和手动分配属性,但这种风险和麻烦没有通过成本/ yield 嗅觉测试。

预先感谢您的帮助!

最佳答案

如果您让 LoadMyObject() 方法从 JSON 填充现有对象实例而不是创建新对象实例,那么您基本上可以做您想做的事。也许 PopulateMyObject() 会是一个更好的名字:

public void PopulateMyObject(string ObjectId, object target)
{
string ObjectJSON = FetchJsonFromDatabase(ObjectId);
PopulateObjectFromJson(ObjectJSON, target);
}

顺便说一句,Json.Net支持从开箱即用的 JSON 填充现有对象,因此您可以使用其 JsonConvert.PopulateObject 方法作为上述代码中 PopulateObjectFromJson 的直接替换。

然后在您的对象构造函数中,您只需执行以下操作:

public MyObject(string ObjectId)
{
DataTransport dt = new DataTransport();
dt.PopulateMyObject(ObjectId, this);
}

概念 fiddle :https://dotnetfiddle.net/I9bHeN

当然,@MickyD 在评论中提出了一个非常好的观点,即您会将所有模型对象紧密耦合到 DataTransport 对象,这可能是不可取的。

关于c# - 我可以从数据源创建和反对 "self-loads"属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915639/

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