কীভাবে আমরা সিকিআরএস আর্কিটেকচারে নতুন সামগ্রিক শিকড় তৈরি করব? এই উদাহরণে আমি নতুন একটি সামগ্রিক রুট AR2 তৈরি করতে চাই যা প্রথম একটি এআর 1 এর রেফারেন্স রাখে।
আমি আরআর 2 পদ্ধতিটি শুরুর পয়েন্ট হিসাবে তৈরি করছি। এখনও অবধি আমি কয়েকটি বিকল্প দেখতে পাচ্ছি:
- এআর 1-এর পদ্ধতিটির অভ্যন্তরে
createAr2RootOpt1
আমি কল করতে পারি এবং ডিপটিnew AR2()
সংরক্ষণ করতে পারি imed আমি প্রথম সমষ্টিগত মূলতে ইভেন্ট নির্গত করতে পারতাম।
SholdCreateAR2Event
এবং তারপরে স্টেটলেস কাহিনী রয়েছে যা এর উপরে প্রতিক্রিয়া জানায় এবং কমান্ডটি প্রদান করেCreateAR2Command
যা তখন পরিচালিত হয় এবং আসলে এআ 2 তৈরি করে এবং নির্গত হয়AR2CreatedEvent
। ইভেন্ট সোর্সিং ব্যবহারের ক্ষেত্রেSholdCreateAR2Event
ইভেন্ট স্টোরে সংরক্ষণ করা হবে না, কারণ এটি প্রথম সমষ্টিগত মূলের অবস্থাকে প্রভাবিত করে না। (বা আমাদের কি এখনও ইভেন্ট স্টোরে সংরক্ষণ করা উচিত?)class AR1{ Integer id; DomainService ds; //OPTION 1 void createAr2RootOpt1(){ AR2 ar2 = new AR2(); ds.saveToRepo(ar2); } //OPTION 2 void createAr2RootOpt2(){ publishEvent(new SholdCreateAR2Event()); //we don't need this event. Shoud it still be preserved in event store? } } class AR2{ Integer id; Integer ar1Id; void handle(CreateAR2Command command){ //init this AR with values and save publishEvent(AR2CreatedEvent()); //used for projections afterwards and saved inside AR2 event store } } class Saga{ void handle(SholdCreateAR2Event ev){ emitCommand(new CreateAR2Command()); } }
এটি করার আরও সঠিক উপায় কোনটি?
AR1WasCreated
? এটা করা উচিতAR2WasCreated
? এছাড়াও, আমি যদি আপনার যুক্তি ব্যবহার করি তবে ঘটনাটি তৈরিAR2WasCreated
হওয়ার আগেই আমি ঘটনাটি ছড়িয়ে দেই ? আরআর 1 এর ইভেন্ট লগের মধ্যে এই ইভেন্টটি সংরক্ষণ করা সমস্যাযুক্ত বলে মনে হচ্ছে, যেহেতু আমার আসলে এআর 1 এর অভ্যন্তরে এই ডেটার দরকার নেই (এটি এআর 1 এর ভিতরে কোনও কিছু সংশোধন করে না)।