私たちは、よりテストしやすいようにいくつかのレガシーソフトウェアを再設計している最中であり、Dependency-InjectionとCastle.Windsorが私たちを助けることを決定しました。
まず、私たちの目標は次のとおりです。*すべてがデータストリームで機能する多数のデコレータ。*デコレータの複数の組み合わせが可能であり、それぞれの場合のルートノードは、異なる場所からデータを取得するために必要になる場合があります。
技術的には、私たちのデザインは次のとおりです。
interface IUpdateableValue<T>
{
T Get();
};
たとえば、いくつかのコンポーネントを使用して取得する3セットのデータがあり、すべてIUpdateableValue()(擬似コード)を実装しています。
JsonParser(
Decompressor(
Decrypter(decryptionKey
FileCache(filename,
HttpWebDownloader(url))))
XmlParser(
Decompressor(
Decrypter(decryptionKey2
FileCache(filename2,
HttpWebDownloader(url2))))
Castle-WindsorのようなDIフレームワークに合うようにデザインを作成するのに問題があります。名前付きインスタンスで処理できるものもあると思いますが、これはこの使用法では臭いようです。
たとえば、JsonParserおよびXmlParserインスタンスの「ユーザー」は、データがHttpUrl、ファイル、または魔法のように帽子から引き出されたものであるかどうかを知りません(または気にしません)。
デザインに問題があると思いますが、修正方法がわかりません。
進歩する方法について何かアイデアはありますか?