0

次の例を使用して、asp.net MVC のベスト プラクティスとパターンもお願いします。

私はプロジェクトを持っています。これはそのアーキテクチャです:

  1. モデル
  2. コントローラー
  3. ビュー
  4. ツール

modelsフォルダーには、個別のクラス フィールドにすべての ViewModel があります。すべてのテーブル宣言 (オブジェクト) を 1 つのファイル (AccountModels.cs または ForumModels.cs) に入れました。EF コンテキスト (MyAppContext.cs) 用に別のファイルがあります。

コントローラー- ここには、コントローラー クラスしかありません。しかし、おそらくコードの一部は、より良い例であり、何を改善できるかを提案するでしょう:

private AppContext db = new AppContext ();

[HttpPost]
[Authorize]
public ActionResult AddGun(GunModel model)
{
    if (ModelState.IsValid)
    {
        Gun gunToAdd = new Gun
        {
            Tilte = model.Tilte,
            AuthorID = UserTools.getUser(User.Identity.Name).UserId,
            AddDate = DateTime.UtcNow,
            Content = model.Content,
            CategoryID = model.CategoryID,
            CategoryName = GunsTools.getCategoryName(model.CategoryID)

        };

        db.Guns.Add(gunToAdd);
        db.SaveChanges();

        return RedirectToAction("Details", new { ID = gunToAdd.ID });

    }

return RedirectToAction("Index");

}

これは、AddGun アクションを持つコントローラーの一部です。その他の ActionResults は似ています - 一般に、db コンテキストでラムダ式を使用して値などを取得します。

ビュー- 別のフォルダー内のビュー。部分ビューの場合、特別なプレフィックスを設定します (例: _NavigationPartial.cshtml または _CalculatorPartial.cshtml)。ここで改善すべき点はありますか?もちろん、ビューはモデルではなくビューモデルを使用します。

そして少なくとも - Tools。コードの繰り返しを防ぐために、いくつかのクラスとメソッドをここに配置しました。GetUser(..) や GetCategoryName(..) など、データベースからいくつかのオブジェクトまたは単なる文字列を返すいくつかのメソッドを次に示します。それはまったく良い習慣ですか?

多くの若い MVC 開発者は同じプロジェクト アーキテクチャを持っていると思います (私は個人的にいくつかの企業でそれを見ました)。彼らの多くは、より良いプログラマーになるために自分のプロジェクトの何かを改善したいと考えているかもしれません。

よろしく

4

1 に答える 1

1

上記のコメントで述べたように、このような大まかな質問に答えるのは難しいですが、私はいくつかの観察を行います


  • コントローラーでデータベース エンティティを直接使用することはお勧めできません。これは、コントローラーがデータベースに密接に結合され、実際にはビューに属していないデータがビューに公開される可能性があるためです。

代わりに、ガン エンティティとは何か (データベースの観点から) とガン モデルとは何か (ビューの観点から) の詳細を抽象化する別のデータ レイヤーが必要です。

これに関するランダムに選択されたが良いSOの質問はここにあります


  • コントローラーに依存性注入 (DI) を使用することを検討できます

次のようなコンストラクターがあるようにします。

readonly AppContext _db;
public GunController(AppContext db)
{
    if (db==null) {throw new ArgumentNullException("db is null");}
   _db=db;
}

これには DI コンテナーを使用する必要があります。無作為に選ばれた (しかし本当に良い) 記事はここにあります


何よりも、質問をし続けますが、アプリの特定の領域など、より具体的な質問をするようにしてください。そうすれば、すぐに、何が良い習慣で何がそうでないかを本当によく理解できるようになります!

于 2013-09-18T15:56:40.330 に答える