4

この質問の前に、古いレガシーシステム(vb6、vba、vb.netからc#.netへの40以上のプログラム)を同じDAL(バーコード端末と1つのWebベースのシステム)15年前のvbaプログラムで、不器用または存在しないビジネスロジックを修正するためにほとんどの日を費やしています。私は最近、流暢な検証を備えたエンティティフレームワークモデルを構築しましたが、少し使用した後はこれに満足することはできませんでした。

小さなチームはWebフォームに精通していますが(それほどではありませんが)、ここ数日、MVCRazorを調査しました。同じページにさらに関数を追加しようとするまでMVCFrameworkが大好きでしたが、その後、Webフォームに配置した最近のシステムを複製するのは難しいように思われました。以前は、顧客とそのすべての子エンティティをロードし、それを顧客の単一ページにバインドして、顧客がすべてにアクセスできるようにしました(これは彼らが望んでいたものです)。それは問題なく動作し、遅くはありません。この単一のページから、すべてのアカウントの詳細/連絡先/電子メール/電話/ジョブを編集できました。

私が行ってMVCで見たすべての例は、単一の更新、単一の編集などを処理しますが、すべてのアクションを新しいビュー/ページに分離することはできませんか?リッチモデルをMVCのビューに渡すことはできますが、すべての異なる子エンティティを更新しようとすると面倒です。

これはおそらくMVCが設計されていない正確な設計であり、これは問題ありません。MVCが今後より優れたプラットフォームになる場合は、それを採用したいと思いますが、この複雑さの追加にどのように対処するつもりですか?私が見たいくつかの方法:

  1. 部分的なビューがたくさんありますか?子情報をそれらに渡す(またはIDと遅延読み込み)?
  2. <forms>複数をすべてにラップし、そのようにアクションを処理するメソッドを見てきました。
  3. ほとんどすべてのタスクを分離します

ソリューションがより軽量で保守が容易な場合は、必要なものは何でも調査して、時間を無駄にしていないかどうかを早い段階で確認します。私が尋ねるべき正しい質問へのポインタは大歓迎です。

4

2 に答える 2

5

ASP.NET MVCは、他のどのテクノロジよりも複雑なページを処理するための設備が多かれ少なかれ優れています。

確かに、MVCはWebフォームアプリよりも低レベルの作業を必要とし、直接バインディングはサポートされていませんが、ほとんどの場合、これは良いことであり、ページのレンダリング方法にはるかに柔軟性があります。

MVCの全体的なアイデアの1つは、物事をより細かく制御できるようにすることですが、その制御は、ほとんどの重要なケースで、より多くの知識とより多くの努力を必要とすることにつながります。MVCは、簡単な作業(標準のテーブルベースのCRUDの作成など)を高速化するための多数のツール機能を提供しますが、複雑なモデルがある場合は、多くの作業を自分で行う必要があります。

これは、MVCがそれに「適していない」ということではありませんが、その制御と柔軟性には、より多くの責任とのトレードオフがあります。

あなたの場合、あなたは単にあなたが望むすべてのフィールドでビューモデルを作成するだけです。次に、これらのフィールドを編集するためのフォームを作成します。コントローラでは、そのビューモデルのフラット化を解除し、データベースで必要なレコードを作成または更新する必要があります。難しいことではありませんが、WebFormsのデータバインディングよりも手間がかかります。

Telerikのツールなど、MVC用のより高度なツール(商用)を調べることもできます。Telerikのツールは、インターフェイスのようなデータバインディングをさらに開発しましたが、MVCはドラッグアンドドロップテクノロジではないため、接続して書き込みを行う必要があります。何が行われるかについてのさまざまなロジック。

ドラッグアンドドロップのデータバインド機能が必要な場合は、いいえ。MVCは正しいテクノロジーではありません。しかし、WebFormsでは、多くの妥協案も受け入れる必要があり、さまざまな方法で手を結びます。

部分ビューを使用することもできますが、私はめったに使用しません。コレクションや複雑なオブジェクトの場合でも、フォームフィールドに正しく名前を付けることができるため、代わりにEditor/DisplayTemplatesを使用することをお勧めします。注意しないと、PartialViewsには多くの落とし穴がある傾向があります。私はほとんどそれらを派手なインクルードとして、またはAjaxを使用するときにのみ使用します。

「すべてを複数回ラップ」で何を意味するのかわかりませ<forms>ん。フォームをHTMLでネストすることはできません。これは違法です。つまり、テーブルの各行の周りにフォームを配置する場合、ほとんどの場合、これは有効なhtmlではありません。 (テーブルとtrの間にフォームを置くことは違法です)。

あなたが尋ねることができる特定の問題を抱えているなら、それは助けになるでしょう、漠然とした異議は私たちがあなたの問題を解決するのを助けません。

于 2013-03-25T23:24:16.443 に答える
1

WebFormsでできることはすべてMVCで実行できます。違いは、MVCは通常、ページにドロップする「コントロール」を実際には提供しないため、より多くのコードを記述する必要があることです。

GridViewWebFormsでは、を使用してマスター/詳細ビューを作成し、すべてを自動魔法のAJAXサポートFormViewでラップするのは簡単です。UpdatePanel

WebGridMVCには、拡張メソッドや拡張メソッドなどのヘルパーがありますがAjaxHelpers、ビューやページを作成するには、目的の機能を取得するためにどのように機能するかをより深く理解する必要があります。新しいMVCプロジェクトを開始するとき、私が含めるものは次のとおりです。

  1. Backbone.js -RESTful*APIに対してCRUD操作を実行するクライアント側の「ORM」
  2. Knockout.js-クライアント側のビューモデルとビューのリアルタイムデータバインディング
  3. Knockback.js-バックボーンモデルをKnockoutビューモデルでラップします

これらの3つのフレームワークを使用すると、MVCとWebAPIを使用して強力なシングルページアプリをすばやく作成できます。

于 2013-03-25T23:35:45.990 に答える