これは問題を単純化したものです (さまざまな方法があります) が、データベースと対話する必要があるアプリケーションの中で、私は通常、次の 2 つのパターンのいずれかを見てきました。
- オブジェクト リレーショナル マッピング (ORM)。(通常) データベース内の各テーブルには、テーブル内の列に一致するパブリック プロパティを持つ、対応する「行ラッパー」クラスがあります。これらのクラスは関連情報を自動的に取得する場合もあるため、代わりに外部キー列を公開して関連データとして表示することができます (単なる PK 値ではなく)。
- DataTables (および/または DataSets)。データはサーバーから DataTable として取得され、その形式で (UI 内でも) 処理されます。
2 つのアプローチの主な違いの 1 つは、ORM ではコード内で次のように厳密に型指定されたフィールドを参照できることです。
Person bob = new Person();
bob.FirstName = "Bob";
collectionPeople.Add(bob);
一方、DataTable アプローチでは、コードは次のようになります。
DataRow newrow = datatablePeople.NewRow();
newrow["FirstName"] = "Bob";
datatablePeople.Rows.Add(newrow);
この場合、ORM アプローチはコンパイル時チェックの恩恵を受けますが、DataTable アプローチは恩恵を受けません。一方、DataTable (および DataSet) は、リレーショナル データを直接表現する優れた機能を備えた既に作成されたデータ構造であるため、これらを使用するコードは通常、より迅速に実装できます。さらに、DataTable を使用するコードは、他のユーザーが簡単に理解したり変更したりできます。自社製 (および多くの場合 COTS) の ORM システムは、多くの場合、外部キーなどを設定するために「内部で」余分なデータベース アクセスを行います。
では、一般的にどちらのアプローチを支持しますか?またその理由は?