আমি সিকিউআরএস এবং ইভেন্ট সোর্সিংয়ের ধারণাগুলি শিখতে একটি ছোট উদাহরণ প্রয়োগের উপর কাজ করছি। আমার একটি Basket
সামগ্রিক এবং একটি Product
সামগ্রিক রয়েছে যা স্বাধীনভাবে কাজ করা উচিত।
বাস্তবায়নটি দেখানোর জন্য এখানে কয়েকটি সিডো কোড রয়েছে
Basket { BasketId; OrderLines; Address; }
// basket events
BasketCreated { BasketId; }
ItemAdded { BasketId; ProductId; Quantity }
AddItemSucceeded { BasketId; ProductId; Quantity }
AddItemRevoked { BasketId; ProductId; Quantity }
ItemRemoved { BasketId; ProductId; Quantity }
CheckedOut { BasketId; Address }
Product { ProductId; Name; Price; }
// product events
ProductReserved { ProductId; Quantity }
ProductReservationFailed { ProductId; Quantity }
ProductReservationCancelled { ProductId; Quantity; }
কমান্ডগুলি অতীত কাল নয় বরং অত্যাবশ্যকীয় নামটি ব্যবহার করে ইভেন্টগুলির সাথে বেশ মিল।
এই মুহূর্তে স্বতন্ত্রভাবে ঠিক এই কাজ। আমি একটি কমান্ড জারি করি AddItem
এবং এটি সামগ্রীতে একটি ItemAdded
ইভেন্ট তৈরি Basket
করে যা এটি 'বাস্কেটবলের' অবস্থার সাথে কী করা দরকার তা করে। একইভাবে, পণ্যের জন্য কমান্ড এবং ইভেন্টগুলি ঠিক কাজ করে।
আমি এখন এটিকে এমন একটি প্রক্রিয়ার সাথে সংযুক্ত করতে চাই যা এরকম কিছু হবে (কমান্ড এবং ঘটনার ক্ষেত্রে):
প্রক্রিয়া পরিচালক নিম্নলিখিত কাজ করবে:
on BasketCreated: CreateShoppingProcess
on ItemAdded: ReserveProduct
on ProductReserved: SucceedAddingItem // does nothing, but needs to be there so that the basket knows it can check out
on ProductReservationFailed: RevokeAddItem
on RemoveItem: CancelProductReservation
on Checkout: CreateOrder // create an order and so on...
আমি যে প্রশ্নগুলির নির্দিষ্ট উত্তর পেতে পারি না সেগুলি হ'ল:
- আমার কি প্রক্রিয়া পরিচালককে জেদ করা দরকার? মনে হচ্ছে আমি করি, তবে আমি নিশ্চিত নই
- যদি আমি এটি করি, আমার প্রক্রিয়া পরিচালকের জন্য ইভেন্টগুলি সংরক্ষণ করা দরকার। তবে এটি যে ইভেন্টগুলি শুনছে তা সামগ্রিকভাবে আবদ্ধ tied আমি কি তাদের প্রসেস আইডি যুক্ত করব? আমার কি কেবল প্রক্রিয়া পরিচালকের জন্য আলাদা ইভেন্ট আছে? এটি কীভাবে করবেন এবং যতটা সম্ভব ডিআরওয়াই রাখুন
- কীভাবে আমি জানব যে
ProductReserved
ইভেন্টগুলি কী ঝুড়ির জন্য রয়েছে? সেগুলিও কী রাখা ঠিক আছেBasketId
, বা সেই তথ্য ফাঁস? - আমি কীভাবে ইভেন্টগুলির মধ্যে একটি সম্পর্ক রাখতে পারি, কীভাবে
ItemAdded
কোনProductReserved
ইভেন্টটি তৈরি করেছিল তা আমি কীভাবে জানব ? আমি কি সাথে যেতে পারিEventId
? এটি অদ্ভুত বলে মনে হচ্ছে ... - আমি
Basket
কি সাধারণ সামগ্রিকের পরিবর্তে প্রক্রিয়া পরিচালক হিসাবে প্রয়োগ করব ?
আরও কিছু গবেষণা করার পরে আমি এদিকে এসেছি: সাগা এমন একটি জিনিস যা নিজের ঘটনাগুলি রাখে এবং বাইরে থেকে ঘটনা শোনায়। মূলত, এটি একটি সমষ্টি যা এটি নিজের ছোট্ট বিশ্বের বাইরে ঘটে যাওয়া ইভেন্টগুলিতেও প্রতিক্রিয়া জানাতে পারে।
একটি প্রক্রিয়া পরিচালক বাইরে থেকে ইভেন্টগুলির সাথে কাজ করে এবং আদেশগুলি প্রেরণ করে। সমষ্টি সম্পর্কিত সংঘবদ্ধ ইভেন্টগুলির মধ্য থেকে ইতিহাস পুনর্নির্মাণ করা যেতে পারে যা একটি স্বীকৃতি আইডের মতো একটি সাধারণ সনাক্তকারীকে ভাগ করে।