当我不确定数据的格式/内容时,如何将数据传递给对象
本文关键字:数据 对象 不确定 格式 | 更新日期: 2024-11-08 07:49:51
>情况:
我希望创建一个框架来处理数据。数据处理的输出将是一个字符串(我的程序的大部分都需要它)。我将使用其他人制作的数据处理器。
我有一个看起来像这样的界面:
public interface IDataCruncher {
string Execute( ICruncherInput input );
}
问题:
由于每个 DataCruncher 的性能不同并且需要不同的输入,因此我采用了将信息作为dictionary<string, object>
传递,但是打包/解包过程实现起来很繁琐,并且无法安全地编译以打包材料(您可能会拼错字典键,或者忘记一个,导致数据处理器崩溃)。
public interface ICruncherInput {
Dictionary<string, object> Data { get; }
}
问题:
是否有可能将数据传递给具有编译时安全性的数据处理器实现,或者至少比从对象强制转换的安全性更强?
有没有办法在代码中定义这些关键协定?(与假设字典将包含我需要的键相反,并在代码之外的文档中定义键)
我向类传递数据的常用方法是将其传递给构造函数。由于构造函数不是接口的一部分,因此实现同一接口的不同类可以具有不同的构造函数签名。
但是,如果您不通过默认构造函数实例化类,则它仅有效。
IDataCruncher cruncher1 = new DataCruncherA(x, y, z);
IDataCruncher cruncher2 = new ExcelDataCruncher(pathOfExcelFile);
IDataCruncher cruncher3 = new SampleDataCruncher();
当然,它是完全类型安全的,如果传递了错误的参数,则不会编译。
看看动态类型,它应该给你一些更健壮和(运行时)编译器安全的东西。
或者,您可以使用如下所示的泛型类型:
public interface ICruncherInput <T> {
Dictionary<string, T> Data { get; }
}
可以这样实现:
public CruncherInput : ICruncherInput<YourObject>
{
Dictionary<string, YourObject> Data { get; }
}