जब आप ईवेंट को फिर से चलाते हैं, तो आप उन सभी डोमेन तर्कों को फिर से नहीं चला रहे हैं जो उन घटनाओं को उत्पन्न करने के साथ-साथ गए थे। आमतौर पर आपके डोमेन विधि में आप एक ईवेंट उठाएंगे; उस घटना को बढ़ाने के बाद उस डोमेन ऑब्जेक्ट की समग्र स्थिति को अपडेट करना चाहिए।
उदाहरण के लिए:
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
के साथ ही - यह इवेंट हैंडलर निष्पादित हो जाएगा, न कि डोमेन विधि जो घटना को उठाती है।
इस कार्यक्रम में डोमेन मॉडल को अपडेट करने के लिए आवश्यक सब कुछ शामिल है (और पढ़ने के मॉडल में अपडेट लागू करें)। निष्पादित डोमेन विधियां आपको इस बिंदु पर ले जाती हैं कि एक ईवेंट उठाया जा सकता है।
मुझे आशा है कि इस मदद करता है। अगर मुझे और जानकारी प्रदान करने की ज़रूरत है तो मुझे बताएं।
शुभकामनाएं !!
स्रोत
2011-09-05 22:46:09
मुझे एहसास है कि यह एक बहुत पुराना जवाब है, लेकिन सागा को 'प्रोमोटेक ग्राहक' आदेश जारी करने के बारे में पता होना चाहिए जब उसे 'खरीदमेडवेन्ट' प्राप्त होता है?यह 10 खरीदारियां बनाने वाले ग्राहक पर (ओपी के विवरण के अनुसार) निर्भर करता है, जो डोमेन तर्क है जिसमें सागा शामिल नहीं होना चाहिए। शायद हमेशा 'testToPromoteCustomer' को आग लगाना और वास्तव में पदोन्नति करने के लिए चेक करने दें? इसमें कुछ समय अनाड़ी लगता है, हालांकि .. किसी भी अंतर्दृष्टि –
के लिए धन्यवाद हाँ, आप कर रहे हैं ठीक है, गाथा TestToPromoteCustomer आदेश भेजने चाहिए। मुझे लगता है कि रखरखाव के लिए शुद्धता बलिदान देना बिल्कुल ठीक है। – xelibrion