Smartphonemoriyoshiの日記この広告は、90日以上更新していないブログに表示しています。公開する機会がないなあと思っていたので。※スライド自体はここにあります。パイプラインパターン以前にもこれは言及したことがあるけど、GoF的なパターンとして確立しているというよりかは、定石だということでパターンと呼ばれているもの。GoFのパターンに分類すると、Decoratorパターンと言える。詳細な解説はこちらを参照。(まあ意味は分かるけど)。実装して、Stringオブジェクトの拡張メソッドとしてみた例。}}このようにもともとStringオブジェクトにはPluralizeなどというメソッドはないわけだけど、拡張メソッドを利用することで、別のスタティックなクラスのメソッドとして実装されたものが、あたかもStringオブジェクトのメソッドのように扱うことができるようになる。名前空間の指定の不要な、unqualifiedな形で使える状態にする必要がある。当たり前だけど、スクリプト言語の同様の機能で一度メソッドをクラスに動的に追加したら、実行中はどこからでも*1そのメソッドを利用できるのとは違い、拡張メソッドが適用される範囲はコンパイル単位に限定される。拡張メソッドは、実装を持てないはずのインターフェイスにも適用できるところがおもしろい。文法的にはインスタンスメソッド呼び出しだけど、実際にはスタティックメソッド呼び出しなので、heyがnullでもNullReferenceExceptionにすらならない。行えることが要件となっている。これを確かめるために次のようないじわるなテストを行ってみる。サンプルにしてはソースの数が多いけど勘弁。Objectsではなく、名前空間MyExtensionsの方に実装された拡張メソッドが有効になって、全部の要素が「1」となってしまっていることが分かる。2.0の時代から、デリゲートを用いて、無名メソッドという文法によって記述することができた。ラムダ式が無名メソッドと違うのは、文脈に応じてデリゲートと翻訳されたり、式ツリーとして翻訳されたりするという点。Perlでスカラーコンテキストとリストコンテキストがあるのと似ている。以下の例では、Test1()の引数としてラムダ式を与えた場合はデリゲートとしてコンパイルされ、Test2()の引数としてラムダ式を与えた場合は式ツリーとしてコンパイルされることを確認できる。SQLテーブル間のアソシエーションを表すサンプル。quantityサンプルをソースコード1つで完結させるため、サンプルデータの挿入などもコード中でやっちゃう。Serverのユーザーインスタンスを利用するために.mdfファイルとログファイルを作成しておく。ユーザーインスタンスのための設定が既に行われていることが前提。SQLのサンプルと同一なんだけど、圧倒的に複雑になっていることが分かるんじゃないだろうか。Serverでできています。ともすると、CSDLファイルやSSDLファイルを手作業ベースで書いて解説している日本初の記事ではないかとすら思う...。普通は以下のようなファイルはVisualStudioでちゃっちゃと作成するものなのであまり気にすることはないはず。プロジェクトを手動で構成する方法を」見てもらうとして、ここでエンティティデータモデルとか言ってるのは要はドメインモデルを構成するエンティティクラス群のこと。クラスをXMLで書いたスキーマから自動生成する。Torqueなんかと似てる。/incsdl:exercise.csdlできるファイルはこんなやつ。このコードはツールによって生成されました。コードが再生成されるときに損失したりします。コメントがありません。オブジェクトを初期化します。}...で、これを利用するソースコードは以下。実装するという方法があるものの、前者はいろんな意味でNGなので後者の方法でちょっとやってみようという話。あるIQueryProviderというやつがいて、甲にさらに問い合わせを行う場合は、まず甲を表すExpressionオブジェクトを取り出して、そいつをベースとした式ツリーをつくり、次に甲から甲を作ったファクトリである*2乙のインスタンスを取り出して、それのCreateQuery()を、引数として今作った式ツリーを指定して呼び出す。