どこを見てもコンテキストが見え始めています。ASP.NET MVCには、ControllerContexts、RequestContexts、HttpContexts、FormContextsがあります。Entity Frameworkには、ObjectContextsとDbContextsがあります。NinjectにはNinject.Activation.IContextがあります。
一体何がコンテキストですか?
どこを見てもコンテキストが見え始めています。ASP.NET MVCには、ControllerContexts、RequestContexts、HttpContexts、FormContextsがあります。Entity Frameworkには、ObjectContextsとDbContextsがあります。NinjectにはNinject.Activation.IContextがあります。
一体何がコンテキストですか?
まあ、それは一種の依存性注入のことで、人々が「これがあなたが操作する環境です」と言うことができます。一般に、それらは当然のことながら、それが何であれ「コンテキスト」を提供します。つまり、いくつかの状態。おそらく、URL、おそらくいくつかの HTTP ヘッダーなどです。
ASP.NET はテストに重点を置いており、これらの項目を "スワップ イン" できるため、これらの項目が多数見られます。これにより、独自のコンテキスト実装を提供 (つまり、独自の状態を定義) できるため、テストを実行できます。適切かつ正常に。
状態とは何なのか疑問に思っているなら、それは環境によって「与えられた」さまざまなデータです。いえ 今日は オフィス が 寒い. これは州の一部です。しかし、おそらくオフィスで暑いときにテストを実行したいのでOfficeContext
、適切なメソッドなどに適切な状態をサブクラス化して返すことができます。
IMO、コンテキストは、何かについての(おそらく変更可能な)状態を示します。通常、コンテキストは分野横断的なレイヤーであり、多くの場合、レイヤー間でドメイン中立データを運びます。
コンテキストとは、現在行っていることの範囲外の情報ですが、重要な意味を持つ情報です。
誰かが英語の単語「fly」の意味を尋ねたと想像してみてください。複数の定義があります: 賑やかな小さな検査または空気中を滑空する持続的な行為。正しい答えを出すためには、彼らが探している定義を示すコンテキストが必要です。彼らは双翅目やライト兄弟についての本を読んでいますか?
コンピューティングに関して、HTTP ハンドラーを実装しているとします。他に何も知らなくても (Hello, World!) 応答を生成できる可能性がありますが、HTTP 要求情報のコンテキスト(要求パラメーターは何か、受け入れ可能なエンコードの種類など) が必要になる可能性が高くなります。ユーザーエージェントへの意味のある応答。
それらは、telnet/ssh セッションでの環境変数とプロファイル設定のようなものだと考えています。これらは、さまざまな設定をまとめて、ツールが実行されるコンテキスト (環境など) に基づいてツールを異なる方法で実行できるようにします。
上記の回答は概して非常に優れています。私が追加する唯一のことは、その最も一般的な使用法は、システムの下位層への「接着剤」としてのものであるということです. 一般に、問題のシステムはある種の「コンテナ」システムであり、実行の詳細の多くが隠されているより大きなコード ベース内でコードが実行されます。コンテキストは、その大規模システムへの抽象化されたインターフェースです。
IMO、それは単なる別の議論です。私の(限られた)経験では、それが呼び出しクラスであることがわかりました。うまくいっていることをするためには、自分が何をしているのかを知らなければなりません。コンテキストとは、あなたがしていること、何が起こっている/実行されているかです。