ডিডিডি: ডোমেন ইভেন্ট হ্যান্ডলারগুলি কোথায় রাখবেন?


13

আপনি কি আমাকে আপনার মতামত বলতে পারেন যে কোন স্তরটি ডিডিডিতে ডোমেন ইভেন্ট হ্যান্ডলার স্থাপনের জন্য সঠিক? উদাহরণস্বরূপ, আমার কাছে একটি নতুন চুক্তি যুক্ত করার জন্য অ্যাপ্লিকেশন পরিষেবা রয়েছে এবং চুক্তিটি যুক্ত হওয়ার পরে আমি যোগাযোগ ব্যক্তির কাছে একটি ইমেল বিজ্ঞপ্তি প্রেরণ করতে চাই, তবে সেই ইমেল প্রেরক (যা চুক্তিভিত্তিক ইভেন্ট পরিচালনা করে) অ্যাপ্লিকেশন পরিষেবা বা ডোমেন পরিষেবা বা অন্যকিছু?

উত্তর:


12

আমি অ্যাপ্লিকেশন স্তরে ডোমেন ইভেন্ট হ্যান্ডলারগুলি রাখি।

ডোমেন ইভেন্টটি বাইরের স্তরগুলিকে (বা বাইরের বিশ্বের) বলার উপায় যা ডোমেন স্তরে কিছু ঘটেছে। ইভেন্টটি দিয়ে কী করবেন তা নির্ভর করে আবেদনের উপর। অ্যাপ্লিকেশন ব্যবহারকারীদের পরিবর্তনের বিষয়ে অবহিত করতে পারে বা অন্য কোনও ডোমেনকে কিছু করার জন্য কল করতে পারে। অ্যাপ্লিকেশনটি ব্যবহারকারী ক্রিয়া, ওয়েব অনুরোধ বা ডোমেন ইভেন্টের প্রতিক্রিয়াতে ডোমেন ক্রিয়াকলাপকে অর্কেস্টেট করার জন্য দায়ী।


1
অ্যাপ্লিকেশন স্তর জন্য +1। একটি পাব-সাব ডিজাইনে, ডোমেন ইভেন্টটি বিভিন্ন স্থান / সিস্টেম / মাইক্রোসার্ভিসেসগুলিতে জেনেরিক যুক্তি সক্রিয় করতে পারে। যদি গ্রাহকদের মধ্যে একটি ডিডিডি ব্যবহার করে মডেলিং করা অ্যাপ্লিকেশন হয়, ইভেন্টটি সেই অ্যাপ্লিকেশন / বিসি-তে কিছু প্রক্রিয়াজাত করে। এই প্রক্রিয়াজাতকরণের জন্য লেনদেনের সীমাবদ্ধতা, অ্যাক্সেস নিয়ন্ত্রণ, সমন্বয় প্রয়োজন হতে পারে যা সাধারণত অ্যাপ্লিকেশন স্তরে সম্পাদিত হয়।
পাওলো মেরসন

2

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

যতক্ষণ না আপনি উপরের দিকে নির্ভরতা তৈরি করে লেয়ারিংটি ভাঙেন না ততক্ষণ তাদের কয়েকটি ডোমেন স্তরে রাখার অর্থ হতে পারে।

আপনার যদি ডোমেন স্তরের নীচে একটি অবকাঠামো স্তর থাকে তবে ইভেন্ট হ্যান্ডলারটি সেখানে থাকতে পারে না কারণ এটি লেয়ারিংটি ভেঙে দেবে।

আপনার যদি ডোমেন স্তরের উপরে একটি অ্যাডাপ্টার স্তর থাকে তবে আপনি সেখানে ইভেন্ট হ্যান্ডলার তৈরি করতে পারেন। ষড়ভুজ আর্কিটেকচার পরীক্ষা করে দেখুন ।


2

আমি ডোমেন ইভেন্ট হ্যান্ডলারগুলিকে ডোমেন স্তরটিতে ডোমেন ইন্টারফেস হিসাবে রাখি IDomainEventHandler

একটি ডোমেন ইভেন্ট হ্যান্ডলারের একটি উদাহরণ একটি নীতি যা কোনও নতুন লেনদেনের সূচনা করার জন্য নির্দিষ্ট ডোমেন ইভেন্টের গ্রাহক হয় (যেমন: একটি নতুন ডোমেন কমান্ড ট্রিগার করার জন্য), সুতরাং এটি ডোমেন স্তরটিতে থাকার কারণে এটি বোধগম্য হয় ব্যবসায়িক যুক্তি।

আমরা এমন একটি উদাহরণের কথা ভাবতে পারি যেখানে কোনও অর্ডার নিশ্চিত হয়ে গেছে এবং সুতরাং একটি চালানের অনুরোধ তৈরি করা উচিত। আমাদের একটি ঘটনা OrderConfirmedEventঘটেছে। আমাদের ডোমেনের একটি নীতি এই ইভেন্টটিতে সাবস্ক্রাইব করার জন্য এবং একটি ডোমেন কমান্ড তৈরির দায়িত্বে RequestInvoiceথাকবে যা কমান্ড হ্যান্ডলার দ্বারা পরিচালিত হবে এবং সেই অনুযায়ী এটি মোকাবেলা করবে।

যদি আমাদের অ্যাপ্লিকেশন স্তরে এই ইভেন্ট হ্যান্ডলারটি থাকে তবে এর অর্থ হ'ল অ্যাপ্লিকেশন স্তরটি ব্যবহারকারীর ক্রিয়াকলাপ ছাড়াও কিছু ব্যবসায়িক যুক্তি কার্যকর করে, যা ভুল বলে মনে হয়।

তবে আমাদের আছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.