2011-02-05 12 views
0

アプリケーション要件:ユーザーがプロパティを変更した場合(テキストボックスにデータを入力してからテキストボックスを終了する場合など)、データベースに直ちに更新する必要があります。エンティティがサービスレイヤにアクセスし、更新/保存メソッドを実行する必要がありますか?

MVVMデザインパターンのWPFを使用しています。私のすべてのエンティティはINotifyPropertyChangedを実装しています。 私は

Customer.cs 

customerService.UpdateCustomer(this); 

を行う顧客の変更のいずれかのプロパティには、エンティティが本当に自分自身を更新する必要がありますか?または、独自のデータベースへの更新を誘導しますか?

私は、エンティティ内にない場合、私はすぐにプロパティの即興を行うことができますか?

答えて

0

エンティティ自体は更新しないでください。別のサービス(リポジトリ)がそれを行うべきです。 エンティティのPropertyChangedイベントに登録することによって、エンティティを更新する必要があるリポジトリを誘導することができます。イベントハンドラで 、あなたはあなたのエンティティが更新されていることを確認することができます。

Customer c = new Customer(); 

c.PropertyChanged += (s, e) => customerService.UpdateCustomer(c); 

しかし、追記に、私はそれはあなたのエンティティはいつでもプロパティの変更変更する必要があります不思議な要件だと思います。 これはトランザクションが全く役に立たないことを意味します。つまり、すべての変更がコミットされるべきか、あるいは永続化されるべきではない、本当の「作業単位」はありませんか? 次に、データベースへのラウンドトリップも多く発生します。

+0

はい私はあなたの懸念をFrederikで知っています。しかし、彼らは私の要件を考慮しません。私のアプリケーションでは、ユーザーに保存ボタンを押して変更を保存させるように促したり強制したりする必要はありません。したがって、テキストボックスのすべてのLostFocusで、PropChangeが起動され、サービスが呼び出されます。 Btw。あなたはエンティティが自分自身を更新するべきではないと言った...別のサービス...それはまさに私が書いたものである。私はちょうどc.PropertyChanged + =などを書かなかったので、我々は同じ結論に達した。 this.PropertyChanged + =(O、E)=> { スイッチ(e.PropertyName) {場合、 "宿題":私はこれをしなかった元のコードで – msfanboy

+0

_lpRepo.UpdateHomeWork(PeriodNumber、LessonDayDate、宿題)。ブレーク; case "Content":_lpRepo.UpdateContent(PeriodNumber、LessonDayDate、Content);ブレーク; } };宿題やコンテンツのプロパティは時間が必要な長いRTF-Stringになる可能性があるので、期間中に2つの追加の更新メソッドがあります。 – msfanboy

+0

私のアプリには8個のモジュールがあります。プロパティを変更します。今、保存ボタンがあります。これで、どのオブジェクトが削除/追加/変更されたのかを知る必要があります。私は最後のメッセージボックスをポップアップすることができます: "あなたはデータを変更しましたか、保存しますか?"ちょうど言葉のように。しかし、Wordには単なる文書しかありません。私はもっ​​と複雑な8つの "文書"を持っています。だから私のrequriementは大丈夫ですか? ;-) btw。私はSTApplicationでsqliteを使用します。私は往復を気にしません。 – msfanboy

関連する問題