gpt4 book ai didi

c# - 从不同数据格式创建对象的最佳方式

转载 作者:行者123 更新时间:2023-12-03 21:51:41 27 4
gpt4 key购买 nike

对于我正在进行的项目,我需要使用不同的源数据格式创建对象,大致如下所示:

public class FooService
{
protected DataFormat Format { get; set; }

public FooService(DataFormat format = DataFormat.Json)
{
Format = format;
}

public Foo GetFoo(int id)
{
string content = GetContentInFormat("someuri/foo/" + id, Format);

// Something here must create a "Foo" object
// based on Format, which could be Json, Xml or other
}
}

public enum DataFormat
{
Json,
Xml
}

我知道我可以:

1) 有不同的方法,根据格式选择合适的:

switch (Format)
{
case DataFormat.Xml:
return CreateFooFromXml(content);
case DataFormat.Json:
return CreateFooFromJson(content);
default:
throw new Exception("Invalid format.");
}

缺点:将以这种方式创建至少 8 种不同的类型,因此我需要更具可扩展性和可维护性的东西。

2) 使 FooService 成为接口(interface)或抽象类并实现具体类,每种格式一个。

缺点:所有类中的业务逻辑总是相同,除了类实例化。使用 JsonFooServiceXmlFooService 可能会造成混淆。

我想知道从可扩展性和可维护性的角度来看,最好的解决方案是什么。

最佳答案

与其将 Format 设为枚举,不如将其设为接口(interface) (IFormat)。

然后,为每种格式创建一个实现 IFormat 的具体类(例如,JsonFormat)。

每个具体类应该只具有特定格式的独特之处,例如如何在给定 Id 的情况下查找元素/记录。

这是“策略模式”:http://en.wikipedia.org/wiki/Strategy_pattern

关于c# - 从不同数据格式创建对象的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880232/

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