2008-09-17 4 views
7

Personのようなものを表現するビジネスオブジェクトまたはエンティティを作成するという概念が得られます。次に、DTOを使用してPersonをシリアル化し、クライアントに送信することができます。クライアントがオブジェクトを変更すると、そのオブジェクトにIsDirtyフラグを付けることができます。そうすれば、サーバーに送信されたときに更新することができます。ビジネスオブジェクトへの変更を追跡するには?

しかし、私はOrderオブジェクトを持っていますか?これには、メインヘッダー情報、顧客、サプライヤー、必要な日付などがあります。次にOrderItemsがあります。これはOrder 012em> Order Item>です。私は自分のUI上でこのビジネスオブジェクトを使用できるようにしたい。だから私は、場所、サプライヤー、必要な日付など、およびグリッドに接続されたテキストボックスをOrderItemsに接続しています。 OrderItemsはリストなので、レコードを簡単に追加および削除できます。しかし、どのように私はこれを、特に削除されたアイテムを追跡するのですか?削除されたアイテムがグリッドに表示されないようにするため、foreachを使用した場合、削除されているため、繰り返し処理できないはずです。しかし、私はまだ削除があったという事実を追跡する必要があります。変更をどのように追跡するのですか?私は仕事の単位を使う必要があると思いますか?しかし、コードはかなり複雑になっているようです。ですから、単にDataTablesを使用して、変更の追跡を無料で行うのはなぜですか?しかし、ビジネスオブジェクトがどうやって行くのかを読んでいます。

私は単純なPersonの例で、Ordersのようなヘッダー詳細の例ではないさまざまな例を見つけました。

ここではC#3.5を使用しています。

答えて

-1

データオブジェクトは変更を追跡しません。変更トラッキングは、DataContextと、DataContextで取得したオブジェクトで発生します。私は、コード内のデータコンテキストを使用して直接お勧めしません

public void UpdateOrder(int id, string name) 
{ 
    FooDataContext db = new FooDataContext(); 
    Order order = db.Orders.Where(o=>o.Id == id).FirstOrDefault(); 

    if (order == null) return; 

    order.Name = name; 

    db.SubmitChanges(); 
} 

:あなたのような何かを行うことができ、あなたの分離コードで今すぐ

public class FooDataContext : DataContext 
{ 
    public Table<Order> Orders; 
} 

public class Order 
{ 
     [DbColumn(Identity = true)] 
     [Column(DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] 
     public int Id { get; set; } 

     [DbColumn(Default = "(getutcdate())")] 
     [Column(DbType = "DateTime", CanBeNull = false, IsDbGenerated = true)] 
     public DateTime DateCreated { get; set; } 

     [Column(DbType = "varchar(50)", CanBeNull = false, IsDbGenerated = false)] 
     public string Name { get; set; } 
} 

:だから変更を追跡するために、あなたは次の操作を行う必要がありますこれはLinq To SQLを使い始める良い方法です。すべてのデータベースのやりとりを外部プロジェクトに入れ、GUIからこの動作をカプセル化するクラスに呼び出すことをお勧めします。

Linq To Sqlを初めてお使いになる場合は、Linq To Sql(dbml)ファイルを作成することをお勧めします。

ソリューションエクスプローラでプロジェクトを右クリックし、[新しい項目の追加]を選択します。 Linq To SQLファイルを選択すると、データベースに接続してテーブルを選択できます。

次に、生成されたコードを見て、Linq To SQLの仕組みとそれを使って何ができるかについての素晴らしいアイディアを得ることができます。 LINQ to SQLでの作業、それははるかに行くことができます上の指針としてその

使用...まず

+0

トピックの外出! –

6

、あなたはCSLA.NETのように、これらの問題に対処し、既存のフレームワークを使用することができます。このフレームワークの著者は、これらの非常に問題に取り組んできました。これについてはhttp://www.rockfordlhotka.net/cslanet/にアクセスしてください。完全なフレームワークを使用しない場合でも、コンセプトは適用されます。

あなたが自分でロールしたかったのであれば、これまで私が行ってきたことは自分のコレクションにListを使う代わりに、BindingListから派生したカスタムタイプを使用しました。 BindingListからの参照により、アイテムの追加/削除の動作をオーバーライドできます。たとえば、「delteted」アイテムの別の内部コレクションを持つことができます。オーバーライドされたRemoveメソッドがコレクションで呼び出されるたびに、アイテムを「削除済み」コレクションに配置し、Removeメソッドの基本実装を呼び出します。追加されたアイテムや変更されたアイテムに対しても同じことができます。

2

あなたは作業単位が必要であると思っていますが、作業単位は必要ありません。 NHibernateまたは他のORMを使用してください。それが彼らのために作られたものです。彼らには作業単位が組み込まれています。

ビジネスオブジェクトは確かにほとんどのアプリケーションで「行く方法」です。あなたは深いところへ潜入しており、やるべきことがたくさんあるでしょう。 DDDを見てください。

コードビハインドのようなコードに対しても強くお勧めします。 MVPパターンを調べてください。

私は(私が新しい、非常に批判的なものをたくさん学ぶのを迷惑にしていたのですが)ソリッドを調べます。

JP Boodhooには、これらの多くのことを網羅している.netコース以外のものがあります。

関連する問題