イベントを再生するとき、それらのイベントの生成に伴うすべてのドメイン ロジックを再生しているわけではありません。通常、ドメイン メソッドでイベントを発生させます。そのイベントの発生により、そのドメイン オブジェクトの全体的な状態が更新されます。
例えば:
public class Purchase {
private int _id;
private string _name;
private string _address;
private double _amount;
public Purchase(int id, string name, string address) {
//do some business rule checking to determine if event is raised
//perhaps send an email or do some logging
//etc.
if (should_i_raise_event) {
ApplyEvent(new PurchaseMadeEvent() {
ID = id,
Name = name,
Address = address
});
}
}
public UpdatePurchase(int id, double amount) {
//more checking to see if event is to be raised
if (should_i_raise_event) {
ApplyEvent(new PurchaseUpdatedEvent() {
ID = id,
Amount = amount
});
}
}
protected void OnPurchaseMade(PurchaseMadeEvent e){
_id = e.ID;
_name = e.Name;
_address = e.Address;
}
protected void OnPurchaseUpdated(PurchaseUpdatedEvent e){
_id = e.ID;
_amount = e.Amount;
}
}
この例では、イベントが再生さOnPurchaseMade
れると、ドメイン オブジェクト コンストラクターではなく、イベント ハンドラーが実行されます。と同じPurchaseUpdatedEvent
- イベントを発生させたドメインメソッドではなく、イベントハンドラーが実行されます。
このイベントには、ドメイン モデルを更新する (そして更新を読み取りモデルに適用する) ために必要なすべてが含まれています。実行されるドメイン メソッドによって、イベントを発生させることができるようになります。
これが役立つことを願っています。さらに情報を提供する必要がある場合はお知らせください。
幸運を!!