কোনও ডোমেন ইভেন্ট ব্যবহার করার মাধ্যমে বা অ্যাপ্লিকেশন স্তরটিকে সমস্ত কিছু অর্কেস্ট্রেট দেওয়ার মধ্যে কীভাবে চয়ন করবেন


27

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

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

আমি এখন পর্যন্ত যে বিকল্পগুলি সংগ্রহ করেছি তা হ'ল:

  • অ্যাপ্লিকেশন পরিষেবাটি উভয় পদ্ধতিতে কল করতে দিন
  • সত্তায় ডোমেন পরিষেবা ইনজেকশনের জন্য পদ্ধতি ইনজেকশন / ডাবল প্রেরণ ব্যবহার করুন, সত্তাকে এটি করার অনুমতি দিন এবং তারপরে এটি ডোমেন পরিষেবাটির পদ্ধতিটি কল করতে দিন (বা অন্য কোনও উপায়ে, ডোমেন পরিষেবাটিকে সত্তার উপর পদ্ধতিটি কল করতে দিন)
  • সত্তা পদ্ধতিতে একটি ডোমেন ইভেন্ট উত্থাপন করুন, এমন একটি হ্যান্ডলার যার ডোমেন পরিষেবাটিকে কল করে। (আমি যে ধরণের ডোমেন ইভেন্টের কথা বলছি সেগুলি হ'ল : http://www.udidahan.com/2009/06/14/domain-events-sal مونv/ )

আমি মনে করি এগুলি সবই কার্যকর, তবে আমি তাদের মধ্যে বেছে নিতে পারছি না। আমি এটি সম্পর্কে দীর্ঘ সময় ধরে ভাবছিলাম এবং আমি এমন একটি পয়েন্টে এসে পৌঁছেছি যেখানে আমি আর তিনটির মধ্যে সিন্থেটিক পার্থক্য দেখতে পাচ্ছি না। আপনি কখন কিছু ব্যবহার করবেন সে সম্পর্কে কিছু গাইডলাইন জানেন?


1
ডোমেন ইভেন্ট সম্পর্কিত তথ্যের আকর্ষণীয় লিঙ্কের জন্য ধন্যবাদ।
JW01

এই দুটি পদ্ধতি একটি নির্দিষ্ট ক্রমে কল করা উচিত?
স্পেসট্রকার

পছন্দ করুন তবে প্রতিটি অপশনে আমি নিজেই উল্লেখ করেছি যে কেউ চাইলে পদ্ধতিগুলি কার্যকর করার আদেশ দিতে পারবেন।
ডিভিডিভোরলে

উত্তর:


19

অ্যাপ্লিকেশন পরিষেবাটি উভয় পদ্ধতিতে কল করতে দিন

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

সত্তায় ডোমেন পরিষেবা ইনজেকশনের জন্য পদ্ধতি ইনজেকশন / ডাবল প্রেরণ ব্যবহার করুন, সত্তাকে এটি করার অনুমতি দিন এবং তারপরে এটি ডোমেন পরিষেবাটির পদ্ধতিটি কল করতে দিন (বা অন্য কোনও উপায়ে, ডোমেন পরিষেবাটিকে সত্তার উপর পদ্ধতিটি কল করতে দিন)

এটি আরও ভাল পদ্ধতির কারণ আচরণের বেশিরভাগটি সত্তা বা ডোমেন পরিষেবাতে দেওয়া হয়। এটি প্রয়োগের সর্বাধিক decoupled উপায় হ'ল আচরণটি সরবরাহ করার পদ্ধতির পরামিতি হিসাবে কোনও সত্তার কোনও পরিষেবার উপর নির্ভরতা প্রকাশ করা।

সত্তা পদ্ধতিতে একটি ডোমেন ইভেন্ট উত্থাপন করুন, এমন একটি হ্যান্ডলার যার ডোমেন পরিষেবাটিকে কল করে।

উদী এবং নিজে এভান্স নিজেই ব্যাখ্যা করেছেন এমন ডোমেন ইভেন্টের প্যাটার্নটি বেশ বহুমুখী এবং এটি বিভিন্ন পরিস্থিতিতে প্রয়োগ করা যেতে পারে। কিছু জটিলতা রয়েছে যা এর সাথে আসে। প্রথমত, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে ডোমেন ইভেন্ট প্রকাশকের মধ্যে আপনার সঠিক স্কোপিং রয়েছে। বেশিরভাগ সময়, আপনার ডোমেন ইভেন্টের হ্যান্ডলারগুলির উপর নির্ভরতা থাকবে এবং আপনি যদি কোনও আইওসি পাত্রে ব্যবহার করছেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কোনও সঠিক দৃষ্টান্ত ইনজেকশনে রয়েছে। উদাহরণস্বরূপ, একটি ওয়েব অ্যাপ্লিকেশনটিতে[ThreadStatic]বৈশিষ্ট্যটি স্কোপিংয়ের জন্য সমস্যাযুক্ত। আর একটি জটিলতা হ'ল প্রতিলিপি সীমানা bound আপনাকে লেনদেনগুলি বিবেচনায় নিতে হবে, কারণ কোনও সত্তা যদি একটি ডোমেন ইভেন্ট উত্থাপন করে তবে ডাটাবেসের সাথে একটি প্রতিশ্রুতি ব্যর্থ হয় তবে সমস্ত ডোমেন ইভেন্ট হ্যান্ডলারের পিছনে রোল করার জন্য একটি উপায় প্রয়োজন হবে, অন্যথায় আপনি একটি অবৈধ ইভেন্ট উত্থাপন করবেন। তবে আপনি যদি এই ঘাঁটিগুলি আচ্ছাদিত পেয়ে থাকেন তবে ডোমেন ইভেন্টগুলি সত্তার মধ্যে ডোমেন লজিককে নিজের করে নেওয়ার জন্য দুর্দান্ত প্যাটার্ন।

পদ্ধতির 2 এবং 3 এর মধ্যে পার্থক্যটি ব্যবহারের ক্ষেত্রে নির্ভর করে। আপনি যখন অতীতের কালীন কোন ইভেন্টের প্রতিক্রিয়া হিসাবে অতিরিক্ত আচরণ করতে চান তখন একটি ডোমেন ইভেন্ট প্রযোজ্য । এটি একটি গুরুত্বপূর্ণ বাধা, যেহেতু ডোমেন ইভেন্ট হ্যান্ডলার সত্তার আচরণকে প্রভাবিত করতে পারে না। অন্যদিকে, পদ্ধতির 2 সহ, ইনজেকশনের পরিষেবাটিতে আচরণকে প্রভাবিত করার সম্ভাবনা রয়েছে কারণ এটি নির্দিষ্ট আচরণের জন্য নির্ভরতা হিসাবে ঘোষণা করা হয়।

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