0

ASP.Net 2.0 Web フォームで記述されたシステムがあります。MySQL Server と通信するフレームワークは非常に優れています。サーバーフォームタグまたはパネル内のすべてのコントロールを読み取り、ターゲットテーブルで CRUD 操作を実行します。

CRUD ページを作成するときは、データベース user{id,name,password,createdate} にテーブルを作成するだけで済み、テーブル内の正確な列名になるように id を使用するだけです。コントロールは、入力/選択/オプション/チェックボックス/テキストエリア、またはページ上の FCK エディターまたは CK エディターです。フレームワークは、パネル内のすべてのコントロールをループし、保存/編集/削除します。新しいフィールド (メールとモバイル) を追加したい場合は、ページに 2 つのコントロールを追加し、テーブルにさらに 2 つの列を追加するだけです。それでおしまい。page.aspx.cs ファイル、エンティティ レイヤー、ビジネス レイヤー、またはデータ アクセス レイヤーで何も変更する必要はありません。実装と保守は非常に簡単です。

Entity Framework CT5 で ASP.Net 4 MVC3 を使用するようにシステムをアップグレードしたいと考えています。システム全体をゼロから再構築します。ここの何人かの専門家が私にいくつかの指針を与えてくれることを望んでいました. システムを再構築するには、次の 2 つのオプションが見つかりました。

1. Code First 私たちの新しいシステムは、上記のフレームワークとまったく同じ操作を行います。すべての Request.Forms データをループし、それらをデータベース内の関連テーブルにマップして、すべてのデータを保存/更新/削除します。これを行うには、ビューがフォーム データをポストし、コントローラーがエンティティ クラスで値を受け取り、EF を介してデータベースに保存します。View にデータを表示するには、ViewModel クラスを作成する必要があります。メールやモバイル フィールドをユーザー ページに追加するなどの変更がある場合、エンティティ (ドメイン クラス) と ViewModel の 3 つの場所のビューを変更する必要があります。EF は自動的に ALTER TABLE を実行して 2 つの新しいフィールドを追加するため、データベースを変更する必要はありません。エンティティ クラスとビューモデル クラスの両方のニーズを最小限に抑える方法はまだわかりません。

2. データベース ファースト 私はこの方法を好みませんが、このソリューションがより柔軟な操作を提供する場合はそうします。データベースに列を作成し、システムが動的に ViewModel を作成し (その方法はまだ考え中です)、テーブルのすべての列を読み取り、ページにデータを表示します。ビューがデータをポストするとき、エンティティ クラスを動的に作成し、変更をデータベースに保存する必要があります。

編集: 現在のシステムをアップグレードする理由。

  • .Net 4、Linq、Entity Framework、目立たない JavaScript ライブラリ、JSON データの操作がより簡単、リモート検証 (現在のシステムでは RequireFieldValidator、RegExValidator を使用できますが、制限があります。入力チェックボックスとオプションの検証)、var とインターフェイスを使用したダックタイピング。
4

1 に答える 1

0

新しいシステムは、上記のフレームワークとまったく同じ操作を実行します。すべてのRequest.Formsデータをループし、データベース内の関連テーブルにマップして、すべてのデータを保存/更新/削除します。これを行うために、viewはフォームデータを投稿し、コントローラーはEntityクラスの値を受け入れ、EFを介してデータベースに保存します。

ここで何かが足りない場合は、誰かが私を叩いてください。しかし、これらのステートメントは私には矛盾しているようです。Request.Formsデータを自動的に解析し、それらをデータベーステーブルに直接マップするシステムが必要な場合、なぜEntity Framework(または他の種類のミドルウェア)を使用する必要があるのでしょうか。EFまたは任意のORMのポイントは、システムの名詞を表す概念的なデータオブジェクトの意味のあるコレクションを作成することです。次に、それらの名詞を操作して、それらのプロパティに影響を与えたり、それらの動作にアクセスしたりして、ORMにそれらをテーブルと列にマップする方法を理解させます。

あなたの質問に答えるために、あなたは最も簡単な解決策、つまりあなたが最も少ない量のコードを書かなければならない解決策を望んでいるように思えます。それが正しい仮定である場合は、最初にデータベースを使用することをお勧めします。EFにエンティティクラスを生成させることもできますが、前述のように、ビューモデルクラスを手動で作成するか、何らかのAOP(T4を使用)を考えて生成する必要があります。しかし、ツールに何かを生成する力を与えると、それを制御できなくなります。

私はコードファースト/コンセプトモデルファーストを好みますが、アプリケーション内のすべてを完全に制御することも好きです(AutoMapper、EF、T4MVCなどのツールやフレームワークに委任できるインフラストラクチャの懸念は別として)。はい、エンティティクラス、ビューモデルクラス、およびビュー(およびコントローラー、アクションフィルター、HTMLヘルパー、その他のrrrvrything)を作成する必要があるため、より多くの作業が必要になります。ドメインがテキストボックスをデータベースのテーブルと列に直接マップできるドメインである場合、これはおそらくやり過ぎでしょう。

于 2012-08-02T15:22:55.913 に答える