2011-08-08 5 views

答えて

2

ラムダが活発IoCコンテナとDI(例えばモックフレームワーク)で使用される最近

私はこの分野で以下のGoFパターンを見ることができます:

部品番号は、ラムダのアクティブ用いてProxyパターンを使用しています。例えば:あなたはいつものシングルトンのように、テスト容易性に自分自身を制限することなく、たとえばautofacためIoC容器にSingletonパターンを実装することラムダのヘルプを見つけることができます

var mock = new Mock<IFoo>(); 
mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 

行います

builder.Register(c => new MyClass()).SingleInstance(); 

そしてFactory Methodパターンによる型登録のパラメータを持つコンストラクタ呼び出しを証明する手段:

builder 
    .Register(c => new ObjectContainer(ConnectionStrings.CustomerDB)) 
    .As<IObjectContainer>() 
    .Named("CustomerObjectContainer"); 

はまた

Expression <TDelegate>クラスも密接Interpreterパターン

+0

+1。私は委任もデザインパターンだと思う。 –

1

に関連して、私は彼らが公平なビットを使用参照いくつかの状況であります。

1については、彼らは、コレクション以上の高レベルの反復のための素晴らしいです。しばしば、何らかの種類の情報をリストやツリーなどに適用するだけです。 lambdaを使用すると、コレクション処理のための使いやすくコンパクトなコードが作成されます。 (LINQを使用してC#で)ランダムに無意味例えば:

var list = new List<int>(); 
//... 
list.Where(x => x < 10).Aggregate((current, total) => total + current * current); 

ラムダないが、この種のコードは恐ろしくと不必要に大きくなるであろう。

コールバックを中心とするAPIを使用すると便利です。コールバックを1回使用するだけで済みます。これは、名前空間を乱雑にする余分なコードなので、1回限りの使用を意図した完全な関数を書く必要がありません。

JavaScriptから最後のデザインパターンが得られます。私は閉鎖がラムダの必要な構成要素であるかどうかわからないので、これがラムダ一般に当てはまるかどうかはわかりません。しかし、多くの言語でラムダが変数をクローズできるようになったので、とにかく言及します。

JavaScriptは、プロトタイプベースの継承を介してオブジェクト指向設計が可能です。しかし、1つの欠点は、データ抽象化の概念がないことです。しかし、ラムダが実際にデータ抽象化を提供するために使用されることがあることは間違いなく発見されました。 (実際にはラムダです)無名関数のクロージャを使用することにより、我々はこれを達成することができます:getWidthgetHeightによって定義された閉鎖がwidthheightパラメータを含んでいるので

function Rectangle(width, height) { 
    this.getWidth = function() { return width; } 
    this.getHeight = function() { return height; } 
} 

、パラメータがまだメソッドから使​​用可能です。しかし、他の場所では維持されないので、一旦Rectangleコンストラクタが終了すると、他のコードにアクセスすることはできません。したがって、widthheightは今やRectangleからプライベートになり、提供されたアクセサメソッドを介してのみアクセスできます。

ラムダだけでいい理論的な感じがしていると思います。それらをサポートする言語は、より完全で、制限が少なく、煩雑さが少ないと感じます。

関連する問題