তবে, যদি ইভেন্টগুলির মধ্যে কোনওটি আপনার নিয়ন্ত্রণে থাকা কোনও বাহ্যিক সিস্টেমকে গ্রাহকের কাছে "কোনও জিনিস প্রেরণ" না করার কারণ হয়ে থাকে তবে যদি আপনি কেবল ইভেন্টগুলি পুনরায় খেলুন তবে আইটেমটি দু'বার পাঠানো হবে।
একটি নির্দিষ্ট উদাহরণ চয়ন করতে, আসুন বিবেচনা করুন কীভাবে "অন্তত একবার" পার্শ্ব প্রতিক্রিয়াগুলির দিকে দৃষ্টিভঙ্গি কার্যকর হতে পারে।
State currentState = State.InitialState
for(Event e : events) {
currentState = currentState.apply(e)
}
for(SideEffect s : currentState.querySideEffects()) {
performSideEffect(s)
সুতরাং ডোমেন মডেলটি কী করা দরকার তা ট্র্যাক করে; কিন্তু অ্যাপ্লিকেশনটিতে আসল কাজটি ছেড়ে দেয়
কমান্ড চালানোর প্রসঙ্গে, প্রাথমিক ধারণাটি একই দেখায়। প্রকৃত পার্শ্ব প্রতিক্রিয়াগুলি লেনদেনের বাইরে ঘটে যা মডেলটিকে আপডেট করে।
সুতরাং আপনার মডেলের জন্য ইউনিট পরীক্ষাগুলি এর মতো দেখতে পারে
{
// Given
State currentState = State.InitialState
// When
Events events = List.of(OrderPlaced)
// Then
List.of(SendEmail) === currentState.applyAll(events).querySideEffects()
}
{
// Given
State currentState = State.InitialState
// When
Events events = List.of(OrderPlaced, EmailSent)
// Then
List.EMPTY === currentState.applyAll(events).querySideEffects()
}
এখানে প্রধান পয়েন্ট
- মডেল আপডেট করা পার্শ্ব প্রতিক্রিয়া বিনামূল্যে; প্রকৃত পার্শ্ব প্রতিক্রিয়াগুলি লেনদেনের বাইরে ঘটে যা মডেলটিকে আপডেট করে।
- পার্শ্ব প্রতিক্রিয়ার ফলাফল বর্ণনা করে এমন একটি ইভেন্ট ফিরে আসতে হবে।