কমান্ডে কীভাবে পোস্ট-বৈধতা ত্রুটিগুলি পরিচালনা করতে হয় (DDD + CQRS)


18

উদাহরণস্বরূপ, আপনি রেজিস্টার ফর্মটি জমা দেওয়ার সময়, আপনাকে Domain Model( WriteModelইন CQRS) পরীক্ষা করে দেখতে হবে যে এটি কোনও বৈধ অবস্থায় রয়েছে (উদাহরণস্বরূপ, ইমেল ঠিকানা সিনট্যাক্স, বয়স ইত্যাদি)।

তারপরে আপনি একটি তৈরি করুন Commandএবং এটিকে প্রেরণ করুন Command Bus

আমি বুঝতে পারি যে কমান্ডগুলির কোনও কিছুই ফিরিয়ে দেওয়া উচিত নয়।

সুতরাং কিভাবে আপনি এর বাইরে একটি ত্রুটি পরিচালনা করবেন Command Bus? (উদাহরণস্বরূপ, কোনও ব্যবহারকারী এর আগে 1 সেকেন্ড আগে নিবন্ধভুক্ত username/email)।

আপনি কীভাবে জানবেন যে আদেশটি ব্যর্থ হয়েছে এবং আপনি কীভাবে ত্রুটিটি জানেন?


2
আপনার কোনও ইভেন্ট বাসের দরকার নেই। সিকিউআরএস বাস্তবায়নের সময় সবাই কেন আপনার ইভেন্ট বাসের প্রয়োজন মনে করে, আমি জানি না। সিকিউআরএস এর সহজ অর্থ হ'ল আপনি সম্পূর্ণ আলাদা লিখুন এবং পড়ুন, আলাদা উদ্বেগ তৈরি করুন। আপনি যতক্ষণ না এটি করেন ততক্ষণ আপনার সিকিউআরএস থাকে। আপনার আদেশগুলি এমনকি অ্যাসিঙ্ক্রোনাস হওয়ার দরকার নেই। যদি ত্রুটি প্রতিবেদন সহ সিঙ্ক্রোনাস কমান্ডগুলি আপনার পক্ষে কাজ করে তবে তা করুন।
অ্যান্ডি

1
কমান্ডগুলি সফল হলে কোনও কিছুই ফেরত দেওয়া উচিত নয় । ধারণাটি সিকিউএস থেকে শুরু হয়েছিল , যার মধ্যে এই ধারণাটি অন্তর্ভুক্ত ছিল যে কমান্ডটি ত্রুটিতে এখনও একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারে। আপনি যা বর্ণনা করছেন তা হচ্ছেন একতরফা কমান্ড। সম্পর্কিত এই উত্তর দেখুন ।
ক্যাসি স্পিকম্যান

উত্তর:


4

আমি বুঝতে পারি যে কমান্ডগুলির কোনও কিছুই ফিরিয়ে দেওয়া উচিত নয়।

এটি এক দৃষ্টিভঙ্গি, তবে এটি পুরোপুরি পাথরে সেট করা নয়। এইচটিটিপি-তে লেখাগুলি (পুট, পোস্ট, ডিলেট) বিবেচনা করুন - এই সমস্ত বার্তা হ'ল আদেশটি, এই অর্থে যে তারা অনুরোধ সহ বার্তাগুলি হ'ল সংস্থানটি পরিবর্তনের অনুরোধ জানায় এবং তবুও তারা সকলেই প্রতিক্রিয়া ফেরায়।

আপনি কীভাবে কমান্ড বাসের বাইরে কোনও ত্রুটি পরিচালনা করবেন? (উদাহরণস্বরূপ, কোনও ব্যবহারকারী একই ব্যবহারকারীর / ইমেলের সাথে 1 সেকেন্ড আগে নিবন্ধভুক্ত)।

আপনি কীভাবে জানবেন যে আদেশটি ব্যর্থ হয়েছে এবং আপনি কীভাবে ত্রুটিটি জানেন?

সুতরাং আপনি কমান্ড হ্যান্ডলারের সাথে সরাসরি যোগাযোগ করছেন এমন ক্ষেত্রে, কমান্ডটি প্রাপ্ত হয়েছে এবং প্রক্রিয়াভুক্ত হয়েছে তা স্বীকার করার জন্য একটি ফিরে আসা বার্তা হ'ল সঠিক যুক্তিযুক্ত উপায়।

আপনি যদি বাসের মতো মিডলওয়্যারের একটি টুকরা ব্যবহার করে থাকেন যা আপনাকে লক্ষ্যের সাথে সরাসরি যোগাযোগ করতে বাধা দেয়, তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি অ্যাসিনক্রোনাস মেসেজিং ধাঁচের দিকে নজর রাখুন - আপনি কীভাবে বার্তা প্রেরণ করতে কমান্ড হ্যান্ডলারটি পাবেন? আহ্বানকারী?

একটি ধারণা হ'ল কমান্ডের ফলাফলটি সাবস্ক্রাইব করা; এটি হোপের এন্টারপ্রাইজ ইন্টিগ্রেশন প্যাটার্নসের কিছু ধারণার কাছ থেকে ধার নিয়েছে। মূল ধারণাটি হ'ল, যেহেতু ক্লায়েন্টটি প্রেরিত কমান্ড বার্তার সাথে পরিচিত ছিল, তাই কমান্ড বার্তার ফলাফল হিসাবে প্রকাশিত কোনও নতুন বার্তায় সাবস্ক্রাইব করা ভাল। কমান্ড হ্যান্ডলার, রেকর্ড বইয়ের ডেটা সংরক্ষণ করার পরে, পরিবর্তনটি সফল হয়েছে বলে ঘোষণা করে ইভেন্টগুলি প্রকাশ করে এবং ক্লায়েন্ট সেই ইভেন্টগুলিতে সাবস্ক্রাইব করে - বার্তায় বিভিন্ন শনাক্তকারীদের কাকতালীয় ঘটনা বিবেচনা করে সঠিক ইভেন্টগুলি স্বীকৃতি দেয় (কারণ আইডি, পারস্পরিক সম্পর্ক আইডি , এবং অন্যান্য)।

বিকল্প পদ্ধতিগুলি আরও কিছুটা সরাসরি। একটি হ'ল বার্তাটিতে একটি কলব্যাক অন্তর্ভুক্ত করা উচিত যা বার্তাটি সফলভাবে পরিচালনার পরে কমান্ড হ্যান্ডলার দ্বারা আহ্বান করা যেতে পারে।

একটি অনুরূপ বিকল্প হ'ল কমান্ড হ্যান্ডলারের স্বীকৃতিটি লেখার জন্য কমান্ড বার্তায় স্থান সংরক্ষণ করা - যেহেতু ক্লায়েন্টের কাছে ইতিমধ্যে প্রশ্নে কমান্ড বার্তা রয়েছে, তাই সার্কিটটি ইতিমধ্যে সম্পূর্ণ। " প্রতিশ্রুতি " বা " সম্পূর্ণ ভবিষ্যত" ভাবেন বার্তাটি কমান্ড হ্যান্ডলারকে জানায় কোথায় স্বীকৃতি লিখতে হবে; ক্লায়েন্টকে (কাউন্টডাউন ল্যাচ) সিগন্যাল দিলে যে স্বীকৃতি উপলব্ধ।

এবং অবশ্যই, আপনার কাছে মিডলওয়্যারগুলি সরানোর অতিরিক্ত বিকল্প রয়েছে যা মনে হয় সহজভাবে সঠিক কাজ করার পথে পাচ্ছে।

উদাহরণস্বরূপ, কোনও ব্যবহারকারী একই ব্যবহারকারীর / ইমেলের সাথে 1 সেকেন্ড আগে নিবন্ধভুক্ত

আপনি যদি ব্যবহারকারী রেজিস্ট্রেশনকে আদর্শভাবে পরিচালনা করছেন, তবে এটি অগত্যা কোনও ত্রুটি হবে না - কোনও প্রতিক্রিয়া পর্যবেক্ষণ না হওয়া অবধি বার্তাগুলির পুনরাবৃত্তি হ'ল কমপক্ষে একবার সরবরাহ করা নিশ্চিত করার সাধারণ উপায়।


2

উদাহরণস্বরূপ, আপনি রেজিস্টার ফর্মটি জমা দেওয়ার সময় আপনাকে ডোমেন মডেল (সিকিউআরএসে রাইটমোডেল) যাচাই করতে হবে যে এটি বৈধ অবস্থায় রয়েছে (উদাহরণস্বরূপ, ইমেল ঠিকানা সিনট্যাক্স, বয়স ইত্যাদি)

বৈধতা অনেক ধরণের আছে। আপনি যখন ইমেল ঠিকানার বাক্য গঠন এবং বয়সের বিন্যাসটি যাচাই করেন তখন বৈধতা যা কোনও কমান্ড করতে পারে তা বৈধতার এক প্রকার। এটি আসলে কোনও ডোমেন উদ্বেগ নয়। এটির মতো মনে হতে পারে কারণ কিছু ডোমেন বিশেষজ্ঞরা আপনাকে সেই বিশেষত্বগুলি বলবে তবে আপনার কমান্ড তৈরির ক্ষেত্রে এই ধরণের বৈধতা নেওয়া উচিত। প্রকৃতপক্ষে, সাধারণ ধারণাটি যত তাড়াতাড়ি সম্ভব বৈধতা অর্জন করা কারণ কোনও কমান্ড তৈরি হওয়ার পরে এবং কোনও বাসে প্রেরণ করার পরে পদক্ষেপ নেওয়া আরও জটিল।

আপনি কীভাবে কমান্ড বাসের বাইরে কোনও ত্রুটি পরিচালনা করবেন? (উদাহরণস্বরূপ, কোনও ব্যবহারকারী একই ব্যবহারকারীর / ইমেলের সাথে 1 সেকেন্ড আগে নিবন্ধভুক্ত)।

এই জাতীয় বৈধতা সিকিউআরএসের শুরু থেকেই সিকিউআরএস সম্প্রদায়টিতে প্রচুর আলোচনা করা হয়। এটা কোথায় করবেন? এটা খুব বিতর্কিত। আমি ব্যক্তিগতভাবে নিম্নলিখিত পন্থাগুলি ব্যবহার করি: কমান্ডটি বুসের কাছে প্রেরণের আগে আমি ব্যবহারকারীর নাম / ইমেলটিকে কেন্দ্রীয়ভাবে গ্রহণ করা হিসাবে চিহ্নিত করি (অর্থাত্ ব্যবহারকারীর নাম / ইমেলের উপর একটি অনন্য সূচক বাধা)। তারপরে আমি কমান্ডটি প্রেরণ করি। ত্রুটিটি হ'ল, যদি কমান্ডটি ব্যর্থ হয়, স্বল্প সময়ের জন্য ব্যবহারকারীর নাম নেওয়া হয় এবং ব্যবহৃত হয় না; এটি আমার ব্যবসায়ের পক্ষে গ্রহণযোগ্য, আপনার ব্যবসায়ের পক্ষে এটি সম্ভাব্য।

আপনি কীভাবে জানবেন যে আদেশটি ব্যর্থ হয়েছে এবং আপনি কীভাবে ত্রুটিটি জানেন?

যদি একটি ডোমেন আক্রমণকারী কারণে অ্যাসিক্রোনাস কমান্ডকে সমষ্টি দ্বারা প্রত্যাখ্যান করা হয় তবে কিছু ক্ষতিপূরণকারী কমান্ড জারি করে কিছু ব্যবস্থা গ্রহণ করা আবশ্যক যা কোনওভাবে কমান্ড প্রদানকারীকে অবহিত করে (যেমন একটি আদেশ ইমেল প্রেরণ করুন যে আদেশটি ব্যর্থ হয়েছে)।

সদৃশ ইমেলের সমস্যাটি হ'ল আপনি ইমেলটি প্রেরণ করতে পারবেন না কারণ সেই ইমেল ঠিকানাটি অন্য ব্যক্তির অন্তর্ভুক্ত, এজন্য আমি বাসে কমান্ড প্রেরণের আগে এটি পরীক্ষা করে দেখি।


1

বৈধকরণ একটি সাজসজ্জারে করা উচিত। তারপরে যে কোনও কমান্ডের যাচাইকরণের প্রয়োজন হয় সেগুলি সজ্জিত করা যেতে পারে।

আপনার কমান্ডটি যদি আপনার প্রত্যাবর্তন বাতিল হয় তবে বৈধতাগুলি ব্যতিক্রমগুলি দিয়ে পরিচালনা করা যেতে পারে যাতে তারা প্রত্যাশিত কার্য ফলাফলের সাথে সিঙ্ক বা অ্যাসিঙ্ক কলগুলির সাথে বাছাই করতে পারে।

আর একটি সম্ভাবনা হ'ল বৈধতাটিকে "ক্যোয়ারী" ধরণের যা ভ্যালিডেশনের ফলাফলকে ফিরিয়ে দেয়। বৈধতা ক্যোয়ারী চালান, এবং তারপরে পাস হলে কমান্ডটি চালান। এটি সাজসজ্জার পদ্ধতির বিকল্প হবে।


আমি ব্যতিক্রম পদ্ধতির পছন্দ করি কারণ এটি পরিষ্কার উপায় way তবে ব্যতিক্রমগুলি কি এর জন্য খুব বেশি ভারী নয়?
এরেসেদেভ

1
এইচআই @ এরেসদেভ - হ্যাঁ তারা ভারী। তবে, আপনার ডেটা কীভাবে "বৈধ" তা আমি জানি না। আসুন 1000 রেকর্ডের মধ্যে 2 টি বৈধ নয়। ব্যতিক্রমগুলি কার্যকর হতে পারে যেহেতু তারা সত্যই ব্যতিক্রমী শর্ত। এখন 200 বৈধ নয় সহ 1000 রেকর্ড বিবেচনা করুন। সেই কারণে, হ্যাঁ ব্যতিক্রমগুলি এড়ানো উচিত কারণ আপনার 20% ডেটা বৈধ নয়। সুতরাং, আমি আপনার বর্তমান ডেটা বৈধতার উপর ভিত্তি করে এই পদ্ধতির চয়ন করবেন কিনা তা স্থির করার সিদ্ধান্তটি আপনার উপর ছেড়ে দিচ্ছি। :)
জন রায়নার

আমি এটি যুক্ত করে যোগ করব যে আমরা যদি নিবন্ধের ফর্মের উদাহরণটি রাখি, যেখানে আমি মনে করি 50% বা তারও বেশি ব্যবহারকারী প্রথমে অবৈধ ডেটা sertোকায়, ব্যতিক্রম এখনও ঠিক আছে। ওয়েব অ্যাপ্লিকেশন ব্যাকএন্ডে, আপনি বেশিরভাগ ক্ষেত্রে বৈধ ডেটা পান কারণ সীমান্তগুলি বৈধতাও সম্পাদন করে। আপনি কেবল তখনই পান যদি কোনও কিছু দুর্লভ সুযোগের দ্বারা সীমান্তের বৈধতা হারিয়ে ফেলে বা কেউ যদি বোকা বোকা হয়ে থাকে। সুতরাং, ব্যতিক্রমগুলি এই ক্ষেত্রে খুব ঠিক আছে।
এরেসদেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.