EventSourcing उस पैटर्न की तरह लगता है जिसे आप खोज रहे होंगे।
आइए एक सरल "कार" ऑब्जेक्ट का उपयोग करके एक उदाहरण लेते हैं जिसे हम (छद्म सी # कोड निम्न) के रंग का ट्रैक रखना चाहते हैं।
public class Car {
public string Color { get; set; }
public Car() { this.Color = "Blue"; }
}
एक CRUD कार्यान्वयन के साथ जब हम कार के रंग को अपडेट करते हैं तो पिछला रंग खो जाएगा।
MyCar.Color = "Red";
MyCar.Save(); // Persist the update to the database and lose the previous data
जानकारी का यह नुकसान मुझे लगता है कि आप सबसे अधिक से बचने के लिए क्या करना चाहते हैं (इसलिए अद्यतन और सीआरयूडी का हिस्सा हटाने के लिए नापसंद)।
अगर हम कार क्लास को फिर से लिखना चाहते थे, तो इसके बदलाव के बारे में घटनाओं पर प्रतिक्रिया देने के बजाय, यह इस तरह दिख सकता है:
public class Car {
public string Color { get; private set; } // Cannot be set from outside the class
public void ApplyEvent(CarColorChangedEvent e) {
this.Color = e.Color;
}
}
अब हम इस ऑब्जेक्ट का रंग कैसे अपडेट करेंगे? हम एक CarColorChanged घटना बना सकते हैं !
var evnt = new CarColorChangedEvent("Red");
MyEventStore.save(evnt);
MyCar.ApplyEvent(evnt);
वास्तविक मॉडल ऑब्जेक्ट पर एक बचत की कमी को नोटिस करें? ऐसा इसलिए है क्योंकि सीधे मॉडल को जारी रखने के बजाय हम उन घटनाओं को जारी रखते हैं जो मॉडल को वर्तमान स्थिति में डालते हैं। ये आयोजन अपरिवर्तनीय होना चाहिए ।
अब तेजी से आगे बढ़ते हैं और रंग को कुछ और बार बदलते हैं:
var evnt = new CarColorChangedEvent("Green");
MyEventStore.save(evnt);
MyCar.ApplyEvent(evnt);
var evnt = new CarColorChangedEvent("Purple");
MyEventStore.save(evnt);
MyCar.ApplyEvent(evnt);
यदि हम अपने ईवेंट स्टोरेज को देखते हैं (एक रिलेशन डेटाबेस हो सकता है, फाइल आधारित, आदि।) हम अपनी कार ऑब्जेक्ट से संबंधित घटनाओं की एक श्रृंखला देखेंगे:
CarColorChangedEvent => Red
CarColorChangedEvent => Green
CarColorChangedEvent => Purple
यदि हम उस कार ऑब्जेक्ट को फिर से बनाना चाहते हैं तो हम बस एक नई कार ऑब्जेक्ट बना सकते हैं और हमारे इवेंटस्टोर से घटनाओं को उक्त ऑब्जेक्ट पर लागू कर सकते हैं।
var MyCar = new Car();
var events = MyDatabase.SelectEventsForCar("CarIdentifierHere");
foreach(var e in events) {
MyCar.ApplyEvent(e);
}
Console.WriteLine(MyCar.Color); // Purple
घटनाओं की धारा के साथ हम एक नई कार ऑब्जेक्ट बनाकर कार की स्थिति को पिछली समयावधि में वापस ला सकते हैं और केवल उन घटनाओं को लागू कर सकते हैं जो हम चाहते हैं:
var MyCar = new Car();
var event = MyDatabase.GetFirstEventForCar("CarIdentifierHere");
MyCar.ApplyEvent(e);
Console.WriteLine(MyCar.Color); // Red
Is there a term for this? Basically only creating and reading data?
ज़रूर है: CR; P