我有一个类,保存了一些详细信息于大型数据结构中,在该类中可以使用算法对其进行计算,并且还有一些验证数据结构输入的方法。 但是我希望能够将该数据结构返回,以便视图模型可以将其转换为各种输出形式(字符串/C#数据表/自定义文件输出)。
class MyProductsCollection {
private IDictionary<string, IDictionary<int, ISet<Period>>> products;
// ctors, verify input, add and run_algorithm methods
}
我知道你应该使用“依赖于接口而非实现”的设计原则,因此我想为类创建一个接口。
如何避免编写以下接口? 原因是它会暴露实现细节,并将任何其他具体实现绑定到返回相同形式。
interface IProductsCollection {
IDictionary<string, IDictionary<int, ISet<IPeriod>>> GetData();
// other methods
}
如何在不暴露数据结构的情况下轻松迭代它以形成不同类型的输出?
编辑:
由于该类在构造函数中采用IFunc<IDictionary<string,IDictionary<int,ISet<IPeriod>>>>来迭代数据结构并执行计算,因此我可以提供另一个IFunc,它将构建输出而不是运行计算。然而,除了具体的类构造函数之外,我不知道如何做到这一点。