私はしばらくレスリングしてきたシステムを持っています。基本的には、後で拡張が予想されるだけでなく必要であるという事実に対処するために、多くの抽象化を使用しています。これが必要な場所は、データアクセスです。このシステムでは、一般的に、(観察された値または値のセットの意味で)いくつかの観察をカプセル化し、それらを使用するオブジェクトの管理が扱われます。この目的のために、私は次のようなものを持っています。インターフェイスはタイプ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
引数が公開されますが、特定のサブクラスが必要です。
これは、実装が引数の要件について嘘をついているので、これは設計上の選択肢が貧弱だと思われますが、これを行う別の方法はわかりません。私は他の人がこれらのインターフェースを使用することを期待しているので、私はこの規約を覚えているとは言えません。
それを修正したり、よりエレガントに扱うためのアイデアはありますか?
私はbeartatoアイコンが大好きです! =) –
笑、ありがとう!私はその小さな男が大好きです。 –