私は本当に混乱しています.本「Apress pro Asp.net Mvc 4」で、Mvc 4の最良のパターンは依存性注入であることを学びました(データベースのモデルデータなどを別のプロジェクトに配置するため) (ドメイン) を作成し、それらのインターフェイスへのインターフェイスと実装を作成し、Ninja でコントローラーに接続します。
そして、db へのすべての接続は、viewModel の Web ソリューションの唯一のモデルであるデータ層ソリューションからのみ行われます。
コントローラー
public class ProductController : Controller
{
private IProductRepository repository;
public ProductController(IProductRepository productRepository)
{
this.repository = productRepository;
}
....
}
とNinject
ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();
一方、私の最後の仕事(ウェブマスター)では、会社は mvc プロジェクトに別のパターンを使用していました(私は現在このパターンを使用しています)。
プロジェクトは 1 つのソリューションのみで作成され、静的クラスを使用してデータ層を処理します
依存性注入は好きではありません。これは複雑すぎます。「f12」までに、Concrete クラスの代わりにインターフェースのみが表示されます。
いくつかの質問:
- どのパターンがパフォーマンスに優れていますか (高速な Web サイト)?
- 「public Db db = new Db();」を使うのは良くない ドメイン層でのみ使用するのではなく、コントローラーで使用します(ソリューション)??
- 依存性注入を使用する利点は何ですか? 私のパターンを使うのは悪くないですか?
- プロジェクトをデータレイヤーの 2 つのソリューションに分割する利点は何ですか?
例:
public class LanguageController : AdminController
{
public Db db = new Db();
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
//
// GET: /Admin/Language/
public ActionResult Index()
{
return View(db.Languages.ToList());
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(short id)
{
Language language = db.Languages.Find(id);
db.Languages.Remove(language);
db.SaveChanges();
return RedirectToAction("Index");
}
...
}