ডিডিডি: কোনও রুট সমষ্টিটির জন্য অন্য কোনও রুট সামগ্রীর রেফারেন্স রাখা কি সঠিক?


16

ডোমেন-চালিত ডিজাইন (ডিডিডি) অনুসরণ করার সময়, কোনও রুট সমষ্টিগতভাবে কোনও অভ্যন্তরীণ সত্তার রেফারেন্স রাখা কি পৃথক সমষ্টিতে মূল সত্তা হিসাবে ঘটে?

আমি বিশ্বাস করি এটি সঠিক নয়, মূলত নীল বইয়ের এই নিয়মের কারণে :

রুট ENTITY ব্যতীত অ্যাগ্রিগেট সীমানার বাইরের কিছুই অভ্যন্তরের যে কোনও বিষয়ে রেফারেন্স রাখতে পারে না। রুট ENTITY অন্যান্য বস্তুর অভ্যন্তরীণ ENTITIES এর জন্য রেফারেন্স সরবরাহ করতে পারে তবে এই বিষয়গুলি কেবলমাত্র ক্ষণস্থায়ীভাবে ব্যবহার করতে পারে এবং তারা রেফারেন্স ধরে রাখতে পারে না। মূলটি একটি ভ্যালু অবজেক্টের একটি অনুলিপি অন্য কোনও সামগ্রীর কাছে হস্তান্তর করতে পারে এবং এতে কী ঘটবে তা বিবেচনাধীন নয় কারণ এটি কেবল একটি ভ্যালু এবং এজেন্টের সাথে আর কোনও সম্পর্ক থাকবে না।

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

রুট ENTITIES এর বিশ্বব্যাপী পরিচয় রয়েছে। সীমানার ভিতরে থাকা শিল্পগুলির স্থানীয় পরিচয় রয়েছে, কেবলমাত্র কৃষি বিভাগের মধ্যেই অনন্য।

আমি বিশ্বাস করি এটি যাওয়ার সঠিক উপায় হবে, তবে যেহেতু এটি পুনরাবৃত্তি এবং অপ্রয়োজনীয় বোধ করে (যখন ডিডিডি প্রসঙ্গে, খাঁটি ওওপি সহ, গ্রহণ করা হয়) আমি কিছু প্রতিক্রিয়া চাইছি।


"অভ্যন্তরীণ সত্তা (এটি একটি পৃথক সমষ্টিতে মূল সত্তা হিসাবে ঘটে) বলতে কী বোঝায়?
এরিক tদ

2
এফডাব্লুআইডাব্লু, যে কোনও কিছু সামগ্রিক মূল সত্তাকে উল্লেখ করতে পারে কারণ এগুলি বিশ্বব্যাপী পরিচয়যুক্ত; রেফারার নিজেই একটি মূল সত্তা কিনা না তা অবিরাম।
এরিক tদ

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

উত্তর:


21

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

যাহোক,

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

কোনও অভ্যন্তরীণ সত্তাকে একটি পৃথক সমষ্টিতে রুট সত্তা হিসাবে উল্লেখ করার জন্য কোনও মূল সামগ্রীর পক্ষে সঠিক?

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

গ্রেগ ইয়াংয়ের উত্তর এখানে দেখুন: http://domain-driven-design.3010926.n2.nabble.com/Can-an-Entity-be-Shared-across-many-Aggregates-td7579277.html


সুস্পষ্ট, সংক্ষিপ্ত এবং অন্তর্দৃষ্টিপূর্ণ উত্তরের জন্য গিলিয়াম ধন্যবাদ Thank সত্যিকারের ডিডিডি কনোয়েসিয়রের সাওয়ের-ফায়ার। এই আমি খুঁজছিলাম ছিল। Chapeau!
লেসেইয়ার ভালমন্ট

আমি জানি এটি একটি নির্বোধ প্রশ্ন হতে পারে, তবে আমি কি জানতে পারি holding a referenceএই প্রসঙ্গে এর অর্থ কী ? কারণ আমি তখন বিভ্রান্ত হয়েছি যখন আপনি এটি বলেছিলেন: holding a reference to a root is legitতারপরে আপনি বলেছেন:This never happens. A Value Object can be part of multiple Aggregates, but not an Entity. The reason is, nothing would then prevent you from sharing the same entity instance between Aggregates.
কোনও নাম ডোনটকেয়ার

1
একটি রেফারেন্স ধরে রাখুন = শ্রেণীর সদস্য হিসাবে এটি অভ্যন্তরীণভাবে / যথাযথভাবে রাখা এখানকার দ্বৈতত্ত্ব মূল-বনাম অ-মূল। আপনি রুট রেফারেন্স ধরে রাখতে পারবেন তবে মূল-অ-রেফারেন্স নয়।
guillaume31

@ গিলিউম ৩১ আপনাকে অনেক ধন্যবাদ, তবে আমি জিজ্ঞাসা করতে পারি যে কোনও idঅভ্যন্তরীণ সত্তা (রুট নয়) অন্য কোনও সামগ্রীতে রাখা ঠিক আছে কি (এটি মূল বা না) লঙ্ঘন করে?
কোনও নাম ডোনটকেয়ার

আপনি এই আইডি দিয়ে কি করবেন? এমনকি ভান্ডারগুলি কেবল আপনাকে অভ্যন্তরীণ সত্তা নয়, শিকড় দেয়।
guillaume31

1

আপনার সামগ্রিক রুট অবজেক্টের (সাধারণত) কেবল তার বৈশিষ্ট্য থাকতে হবে যা এর ডোমেনের অংশ।

আপনার যদি কোনও সম্পত্তি সহ কোনও এআর অবজেক্ট থাকে যা সামগ্রিক নয় তবে আপনি অবিলম্বে এই প্রশ্নের মুখোমুখি হবেন। 'কেন না?'

আপনি সম্ভবত অন্য বস্তুর আইডি যুক্ত করতে পারেন? বা একটি ভান্ডার ইনজেকশন?

তবে মনে হচ্ছে আপনার কোনও ক্রস ডোমেন পরিষেবা যুক্ত করা উচিত যা মূল দুটি বিষয়ই উল্লেখ করে এবং প্রয়োজনীয় যুক্তি সম্পাদন করে


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