【发布时间】:2012-02-18 13:17:03
【问题描述】:
我在整理代码时遇到了设计/架构问题。例如,我现在将数据存储在:
internal interface IProperty<TKey1, TKey2> : IDictionary<TKey1, TKey2> { }
internal class PropertyDictionary<TKey1, TKey2> : IProperty<TKey1, TKey2>
我在 PropertyDictionary 中实现 IDictionary。同样使用 PropertyDictionary 我可以拥有一个键,然后为值一个具有公共属性的不可变对象。然后我可以通过以下方式轻松引用数据:
foreach (var data in inputData.Values)
{
var propertyValue = data.MyDataProperty;
}
首先,这种方式存储数据似乎有很多开销,但更重要的是,现在当我需要扩展 PropertyDictionary 的功能时,例如包含 RetrievePrice,它变得复杂,因为我需要在接口中添加其他方法,然后创建一个新课程:
internal interface IAssetPriceData<in TKey1>
{
double RetrievePrice(TKey1 key);
}
internal class PriceDictionary<TKey1, TKey2> : PropertyDictionary<TKey1, TKey2>, IAssetPriceData<TKey1>
因此,我应该如何构造我的代码以轻松存储不同类型的数据,然后轻松检索这些数据,以便我可以对正在存储的属性进行操作/执行计算的解决方案。
【问题讨论】:
-
为什么不使用 .net 中提供的默认数据结构并通过扩展方法添加您需要的功能?
-
如果我实现 IDictionary,我可以更改一些小事情,例如检查密钥是否存在。但即使我确实实现了字典,我有时仍然会遇到扩展其功能的问题。
-
字典已经支持检查键是否存在,您可以在其中添加自己的扩展方法,而无需使用派生类型。
-
经过进一步调查,我正在寻找的是属性包,它使我能够更好地存储和访问数据!
标签: c# oop architecture