EventSourcing এমন প্যাটার্নের মতো শোনাচ্ছে যা আপনি সন্ধান করতে পারেন।
আসুন একটি সাধারণ "গাড়ি" অবজেক্টটি ব্যবহার করে একটি উদাহরণ ধরুন যা আমরা (সিউডো সি # কোড অনুসরণ করে) এর রঙের উপর নজর রাখতে চাই।
public class Car {
public string Color { get; set; }
public Car() { this.Color = "Blue"; }
}
সিআরইউডি বাস্তবায়নের সাথে সাথে আমরা গাড়ির রঙ আপডেট করলে আগের রঙটি নষ্ট হয়ে যায়।
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;
}
}
এখন আমরা কীভাবে এই বস্তুর রঙ আপডেট করব? আমরা একটি কার কালার চেঞ্জড ইভেন্ট তৈরি করতে পারি !
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?
অবশ্যই আছে: সিআর; পি