gpt4 book ai didi

c# - 我的通用解耦非常丑陋

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

我正在创建一个可以处理设置和加载/保存设置的 dll。

我有一个设置类,其属性类似于 string Path , DateTime LastOpened , ETC。设置可以是任何东西,唯一的要求是它有一种默认值的方法。

有一个不同的类负责加载/保存设置。此类可以采用任何设置类并(反)序列化为任何文件格式。例如,它可以从 XML 文件加载某种类型的设置,或者从 JSON 文件加载相同类型的设置。

我的设计最终变得有点奇怪。

我为所有设置类定义了一个接口(interface),所以我知道 DefaultSettings()可用。

interface ISettings<T>
{
T DefaultSettings();
}

我的设置类可能如下所示:

public class MySettings : ISettings<MySettings>
{
public DateTime LastOpened;
public string Path;

public MySettings DefaultSettings()
{
LastOpened = DateTime.Now;
Path = @"c:\";
}
}

我的实现类自己告诉接口(interface),这看起来已经很奇怪了。

加载/保存类实现了这个接口(interface):

interface ISettingsFile<T>
{
T Load(string file);
void Save();
}

假设我要加载 MySettings来自,比如说,XmlSettingsFile<MySettings> .我将不得不写一些丑陋的东西,比如

MySettings mySettings = new MySettings();
XmlSettingsFile<MySettings> file = new XmlSettingsFile<MySettings>();
try {
mySettings = file.Load();
} catch (FileNotFoundException)
{
mySettings = mySettings.DefaultSettings();
}

这简直太诡异丑陋了。必须有更好的方法来做到这一点。

你有什么好的想法吗?

最佳答案

我不认为你的方法是丑陋的。使用中间字符串表示或类似的东西当然更好。

因此我会说你的方法很好,保持原样。

关于c# - 我的通用解耦非常丑陋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22558817/

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