私は現在、既存のテクノロジーに流暢なインターフェースを実装することに専念しています。これにより、次のスニペットのようなコードが可能になります。
using (var directory = Open.Directory(@"path\to\some\directory"))
{
using (var file = Open.File("foobar.html").In(directory))
{
// ...
}
}
このような構造を実装するには、引数を蓄積して他のオブジェクトに渡すクラスが必要です。たとえば、Open.File(...).In(...)
構成を実装するには、次の2つのクラスが必要です。
// handles 'Open.XXX':
public static class OpenPhrase
{
// handles 'Open.File(XXX)':
public static OpenFilePhrase File(string filename)
{
return new OpenFilePhrase(filename);
}
// handles 'Open.Directory(XXX)':
public static DirectoryObject Directory(string path)
{
// ...
}
}
// handles 'Open.File(XXX).XXX':
public class OpenFilePhrase
{
internal OpenFilePhrase(string filename)
{
_filename = filename
}
// handles 'Open.File(XXX).In(XXX):
public FileObject In(DirectoryObject directory)
{
// ...
}
private readonly string _filename;
}
つまり、最初の例などの構成要素ステートメントが多いほど、実際のステートメントが最終的に実行できるようになるまで、チェーン内の後続のオブジェクトに引数を渡すために、より多くのオブジェクトを作成する必要があります。
質問:
私はいくつかの意見に興味があります:上記の手法を使用して実装された流暢なインターフェイスは、それを使用するアプリケーションの実行時のパフォーマンスに大きな影響を与えますか?実行時のパフォーマンスでは、速度とメモリ使用量の両方の側面を参照します。
非常に短い期間だけ、潜在的に多数の一時的な引数節約オブジェクトを作成する必要があることを覚えておいてください。これは、ガベージコレクターに一定の圧力をかける可能性があると思います。
パフォーマンスに大きな影響があると思われる場合は、流暢なインターフェイスを実装するためのより良い方法を知っていますか?