これまで、Nerddinner や ContactManager などの単純なアプリケーションだけでなく、Kigg などのより複雑なアプリケーションも調べてきました。私はより単純なものを理解していますが、今はより複雑なものを理解したいと思っています。
通常、より単純なアプリケーションには、LINQtoSQL または Entity Framework の上にリポジトリ クラスとインターフェイス (できる限り疎結合) があります。リポジトリは、必要なデータ操作を行うためにコントローラーから呼び出されます。
Kigg や Oxite などのより複雑なアプリケーションを調べるときによく目にするパターンの 1 つに、次のようなものがあります (ここでは表面をなぞっただけですが、どこかから始めなければなりません)。
- IOC DI (Kigg の場合は Unity)
- Web リクエスト ライフタイム マネージャー
- 作業単位
ここに私の質問があります:
本当に疎結合のアプリケーションを作成するには、Unity のようなものを使用する必要があることを理解しています。しかし、Unity をミックスに導入した瞬間に、Web Request Lifetime Manager も導入する必要があるようにも思えます。何故ですか?Nerdinner のようなサンプル アプリケーションに Web Request Lifetime Manager がないのはなぜですか? それは正確に何をしますか?Unity固有のものですか?
私が気付く 2 番目のパターンは、Unit of Work の導入です。繰り返しますが、同じ質問です。Nerddinner または ContactManager が Unit of Work を使用しないのはなぜですか? 代わりに、これらのアプリケーションは、Linq2Sql または Entity Framework の上にあるリポジトリ クラスを使用してデータ操作を行います。作業単位の兆候はありません。それは正確には何であり、なぜそれを使用する必要があるのですか?
ありがとう
以下は、DinnersController レベルでの Nerddiner の DI の例です。
public DinnersController()
: this(new DinnerRepository()) {
}
public DinnersController(IDinnerRepository repository) {
dinnerRepository = repository;
}
したがって、最初のコンストラクターのためにコントローラーがDinnerRepositoryを「所有」しているため、そこで宣言されているため、コントローラーの寿命に依存すると仮定するのは正しいですか?