我有一个系统,我一直在摔跤一段时间。从本质上讲,它使用了很多抽象来处理事实,即后期扩展不仅仅是预期的,而是必要的。一个需要的地方是数据访问。该系统通常处理管理封装了某些观察的对象(在观察值或一组值中)并使用它们。为此,我有以下效果:接口暴露类型A,但实现需要类型B(A的子类)
public interface Observation
{
/** UniqueKey is used to access/identify an observation */
UniqueKey Key
{
get;
}
}
public interface ObservationDataSource
{
/**
* Retrieves an Observation from the actual data source.
* performs any necessary operations to encapsulate values in object
*/
Observation GetObservationByUniqueKey(UniqueKey key);
}
问题出现在这些接口的特定实现上。最终,Observation
和ObservationDataSource
类用特定的运行时类实现。然而,UniqueKey
也可能被扩展以处理数据源中观察的唯一标识值集(可能是一个id,也许是一个时间等)。所以GetObservationByUniqueKey
的任何实现都会公开一个UniqueKey
参数,但期望一个特定的子类。我预计UniqueKey
一旦传入,就会被转换为特定类型。
这似乎是一个糟糕的设计选择,因为实现是关于参数要求 - 但我看不到另一种方式。我希望其他人能够使用这些接口,所以我不能只是说我会记住这个约定。
任何想法修复它或更优雅地处理它?
我喜欢beartato图标! =) – 2009-04-09 23:49:18
哈哈,谢谢!我爱那个小家伙。 – 2009-04-10 00:48:17