0

他の人が次のシナリオにどのように対処するかを学びたいです。

これは宿題やいかなる種類の課題でもありません。サンプルクラスは、私の質問をよりよく説明するために作成されましたが、フィードバックが必要な実際のシナリオを反映しています。

データベースからすべてのデータを取得し、それをオブジェクトに配置します。オブジェクトは単一のレコードを表し、データベースに複数のレコードが存在する場合は、データをレコードオブジェクトのList<>に配置します。

次のクラスがあるとしましょう。

    public class Employee
    {
        public bool _Modified;
        public string _FirstName;
        public string _LastName;
        public List<Emplyee_Address> _Address;
    }

    public class Employee_Address
    {
        public bool _Modified;
        public string _Address;
        public string _City;
        public string _State;
    }

わかりやすくするために、ゲッターとセッターはクラスから省略されていることに注意してください。コード警察が私にそれらを使用していないと非難する前に、この例のためだけに省略されていることに注意してください。

データベースには、従業員用のテーブルと従業員アドレス用のテーブルがあります。

概念的には、データベーステーブルのデータを表すListオブジェクトを作成します。このオブジェクトのディープクローンを作成し、それをフロントエンドのコントロールにバインドします。次に、データベースからのデータを表す2つのオブジェクト(OrigとFinal)があります。

次に、ユーザーはレコードを作成、変更、削除することにより、「Final」オブジェクトに変更を加えます。次に、これらの変更をデータベースに永続化します。

明らかに、私たちは可能な限りエレガントになりたいと思っています。それを必要とするレコードを編集、作成、削除するだけです。

最終的には、2つのListオブジェクトを比較して、次のことができるようにします。

  1. 変更をデータベースに永続化できるように、どのプロパティが変更されたかを確認します。

  2. これらのレコードをデータベースから削除できるように、2番目のリスト<>に存在しなくなったプロパティ(レコード)を確認します。

  3. データベースにこれらを作成できるように、新しいList<>にどのような新しいプロパティが存在するかを確認します。

誰が私たちがこれを最もよく達成できるかについてボールを転がしたいと思っています。トップレベルのプロパティだけでなく、変更を確認するためにEmployee_Addressリストにもドリルダウンする必要があることに注意してください。

私は自分自身を明確にし、提案を楽しみにしています。

4

4 に答える 4

1

null 許容の ObjectID フィールドをレイヤーのベース タイプに追加します。特定のインスタンスがデータベースに保持されているかどうかを確認するために、フロントエンドに渡して戻します。また、アイデンティティ マップがなくても、他にも多くの用途があります。

于 2009-04-02T09:01:12.223 に答える
0

.NETがクラスで行うのとまったく同じことを行いDataます。つまり、レコードの状態(System.Data.DataRowState頭に浮かぶ)と関連するすべてのバージョンを1つのオブジェクトにまとめます。

こちらです:

  • 変更されたのか、挿入されたのか、削除されたのか、それとも元のレコードであるのかが一目でわかります。
  • 古いバージョンを見つけるために別のコレクションを掘り下げることなく、新しいバージョンと古いバージョンをクエリすることで、変更されたものをすばやく見つけることができます。
于 2009-04-02T08:33:37.657 に答える
0

2 つのリスト オブジェクトを比較する必要があるのはなぜですか。本質的に重複データに多くのメモリを使用する可能性があります。

オブジェクトごとに、その特定のオブジェクトが新規、削除済み、または変更済みかどうかを示すステータス プロパティを用意することをお勧めします。プロパティを列挙型にするよりも先に進みたい場合は、更新する変更を含むある種の辞書を含むオブジェクトにすることができますが、これは変更済みステータスの場合にのみ適用される可能性が高くなります。

このようなプロパティを追加した後は、リストを調べたり、新しいオブジェクトを追加したり、削除されたオブジェクトを削除したりするのは簡単です。

Entity Framework がこの種のことをどのように行うかを確認することもできます。

于 2009-04-02T08:36:24.547 に答える
0

Identity Mapパターンの使用を調査する必要があります。Unit of Workと組み合わせることで、データベースに保存する必要のあるオブジェクトを確認できるオブジェクトの「キャッシュ」を維持し、読み取り時に、新しいオブジェクトを作成して返すのではなく、ID マップからオブジェクトを返すことができます。 .

于 2009-04-02T08:45:04.353 に答える