সমষ্টিগত রুট কী?


447

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

সংগ্রহস্থল প্যাটার্নের প্রসঙ্গে, একটি সামগ্রিক মূল কী?


16
নিম্নলিখিত কেস স্টাডি পর্যালোচনা বিবেচনা করুন। কার্যকরী মোট ডিজাইন পার্ট আমি: একটি একক মোট মডেলিং dddcommunity.org/wp-content/uploads/files/pdf_articles/... পার্ট II: মেকিং দলা কাজ একসাথে dddcommunity.org/wp-content/uploads/files/pdf_articles/... পার্ট III: ডিসকভারি মাধ্যমে অন্তর্দৃষ্টি অর্জনে dddcommunity.org/wp-content/uploads/files/pdf_articles/...
বেন ভিতালির

উত্তর:


310

সংগ্রহস্থল প্যাটার্নের প্রসঙ্গে, সামগ্রিক শিকাগুলি কেবলমাত্র আপনার ক্লায়েন্টের কোড সংগ্রহস্থল থেকে লোড করে।

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

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


21
হাইপোথিটিক্যালি, যদি ক্লায়েন্ট কোডটির অন্য কোনও প্রয়োজনে লাইন আইটেমের প্রয়োজন হয়, তবে এটি কি পৃথক পৃথক সমষ্টি গঠন করবে (ধরে নিবেন যে অর্ডার অবজেক্টের সাথে সম্পর্কিত নয় এমন অন্যান্য বিষয় থাকবে)?
আহমদ

20
@ আহমাদ, অন্যান্য সমষ্টিগুলি লাইনআইটেমগুলিকে কেবল পঠনযোগ্য ডেটা হিসাবে উল্লেখ করতে পারে, তারা কেবল এগুলি পরিবর্তন করতে পারে না । যদি অন্যান্য সমষ্টিগুলি সেগুলি পরিবর্তন করতে পারে তবে আপনি আদেশের আক্রমণকারীদের রক্ষা করতে পারবেন না (লাইন আইটেমগুলিও নয়)।
জেফ স্টার্নাল

4
এটি দেখুন উদাহরণস্বরূপ লস্টেচিজস / ব্লগস / জিমি_বোগার্ড / অর্ভিভ / 2010/02/23/… । উদাহরণস্বরূপ, গ্রাহক হ'ল আদেশের আক্রমণকারী, তাই না? যাইহোক, গ্রাহক এছাড়াও অন্য সামগ্রিক মূল হতে পারে? নাকি আমি এখানে কিছু মৌলিক বোঝাপড়া মিস করছি?
আহমদ

3
@ জেফ আপনি বলেছেন "তারা কেবল এগুলি পরিবর্তন করতে পারে না" - এটি কি প্রয়োগযোগ্য, বা সম্মেলনের বিষয়?
নিল বার্নওয়েল

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

206

ইভান্স ডিডিডি থেকে:

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

এবং:

মূলটি হ'ল এইগ্রিগেটের একমাত্র সদস্য যে বাইরের অবজেক্টগুলিকে [।]

এর অর্থ হ'ল সমষ্টিগত শিকাগুলি হ'ল একমাত্র বস্তু যা কোনও সংগ্রহশালা থেকে লোড করা যায়।

একটি উদাহরণ একটি Customerসত্তা এবং সত্তা সমন্বিত মডেল Address। আমরা কোনও Addressমডেল থেকে সরাসরি কোনও সত্তাকে অ্যাক্সেস করতে পারি না কারণ এটি সম্পর্কিত কোনও প্রসঙ্গ ছাড়াই বোঝা যায় না Customer। সুতরাং আমরা এটি বলতে পারি Customerএবং Addressএকসাথে একটি সমষ্টি গঠন করি এবং Customerএটি একটি সামগ্রিক মূল।


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

3
সুতরাং মুখের শব্দটি আমাকে চিরতরে বিভ্রান্ত করছে। Each AGGREGATE has a rootএবং The root is the only *member* of the AGGREGATE- এই ক্রিয়াটি বোঝায় যে মূলটি সমষ্টিগুলির সম্পত্তি। তবে সমস্ত উদাহরণের মধ্যে এটি অন্যান্য উপায়ে রয়েছে: মূলটিতে এমন বৈশিষ্ট্য রয়েছে যা সমষ্টিগত। আপনি কি স্পষ্ট করতে পারেন?
সিনায়েস্টিক

1
কেবল আমার ভাষা ঠিকভাবে পাওয়ার জন্য, Customerশ্রেণিটিকে কি মোটের মূল হিসাবে বিবেচনা করা হয়, বা Customer উদাহরণগুলি ?
জো

1
সাধারণত গ্রাহক-অর্ডার-লাইন-আইটেমের দৃষ্টান্তে কথা বললে গ্রাহক হবে সমষ্টিগত রুট। কোনও গ্রাহকের ইনস্ট্যান্স সেই সমষ্টিগত রুটের উদাহরণ হতে পারে। গ্রাহক নামক একটি সমষ্টিগত রুটের কথা বলার সময় আপনি কোনও গ্রাহকের যৌক্তিক নির্মাণের বিষয়ে আলোচনা করছেন যা কোনও গ্রাহকের উদাহরণ তৈরি করে। গ্রাহকদের সংগ্রহ কেবল একটি সংগ্রহ a
ইব্রাহিম মলুফ

111

সমষ্টিগত মূলটি সহজ ধারণার একটি জটিল নাম।


সাধারন ধারনা

ভাল নকশা করা বর্গ চিত্রটি এর অভ্যন্তরগুলি আবদ্ধ করে। যে বিন্দু দিয়ে আপনি এই কাঠামোটি অ্যাক্সেস করেন তাকে বলা হয় aggregate root

এখানে চিত্র বর্ণনা লিখুন

আপনার সমাধানের অভ্যন্তরীণগুলি খুব জটিল হতে পারে তবে এই শ্রেণিবিন্যাসের ব্যবহারকারী কেবল ব্যবহার করবেন root.doSomethingWhichHasBusinessMeaning()


উদাহরণ

এই সাধারণ শ্রেণীর শ্রেণিবিন্যাস পরীক্ষা করুন এখানে চিত্র বর্ণনা লিখুন

আপনি কিভাবে আপনার গাড়ী চালনা করতে চান? আরও ভাল এপি বেছে নিন

বিকল্প একটি (এটি কেবল কোনওরকম কার্যকর হয়):

car.ride();

বিকল্প বি (ব্যবহারকারীর ক্লাসের অভ্যন্তরীণ প্রবেশাধিকার রয়েছে):

if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
    for (Wheel w: car:getWheels()){
        w.spin();
    }
}

আপনি যদি সেই বিকল্পটি আরও ভাল বলে মনে করেন তবে অভিনন্দন। আপনি পিছনে মূল কারণ পেতেaggregate root


সমষ্টিগত রুট একাধিক ক্লাসকে আবদ্ধ করে। আপনি কেবল প্রধান অবজেক্টের মাধ্যমে পুরো শ্রেণিবিন্যাস পরিচালনা করতে পারেন।


17
আমি উদাহরণটি পছন্দ করি তবে আমি গ্রাহককে ইঞ্জিনটি রেফারেন্স করা উচিত এমন একটি দৃশ্যের সন্ধান করতে সংগ্রাম করছি। দেখে মনে হচ্ছে ইঞ্জিনটি গাড়ির পিছনে আবদ্ধ হওয়া উচিত। আপনি কি এই একটু বিস্তারিত বলতে পারেন?
এমরাগিনস

আমার মতে ইঞ্জিনটি অবশ্যই একটি গাড়ী নির্দিষ্ট মডেলের মধ্যে থাকতে হবে, যেমন 3000 সিসি ইঞ্জিন সহ একটি বিএমডাব্লু সিরিজ 5। এই মডেলিংয়ের সাথে ইঞ্জিন একটি গাড়ির জন্য একটি উপাদান।
পরমা ধর্মিকা

1
@ পরমধর্মিকা নিশ্চিত, আপনি এটিকে মডেল করতে পারবেন। এটি আপনার গ্রাহকরা কীভাবে গাড়ি নিয়ে 'অগ্রসর' তার উপর নির্ভর করে। বেসিক মডেলটিতে তার carসামগ্রিক মূলের অ্যাক্সেস থাকা উচিত । আপনি অঙ্কনের মতো পরিস্থিতিকেও অনুমতি দিতে পারেন। সঠিক সমাধান প্রয়োগের ব্যবসায়িক মডেলের উপর নির্ভর করে। এটি প্রতিটি ক্ষেত্রে আলাদা হতে পারে।
মার্সিন সিজেমকাক

1
@ মার্সিনসাইজম্যাকাক সঠিক, এটি আরও একমত হতে পারে না যে সমাধানটি ডোমেন মডেলের উপর নির্ভর করে
পরমা ধর্মিকা

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

35

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

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

সমষ্টিগত রুটটিকে একটি সমষ্টিতে প্রবেশের পয়েন্ট হিসাবে বিবেচনা করুন।

সি # কোডে:

public class Computer : IEntity, IAggregateRoot
{
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }
}

public class Hardware : IEntity { }
public class Software : IValueObject { }

public class Repository<T> : IRepository<T> where T : IAggregateRoot {}

মনে রাখবেন যে হার্ডওয়্যারটি সম্ভবত একটি ভ্যালুওবজেক্ট (তার নিজস্ব পরিচয় নেই) হতে পারে, এটি কেবল উদাহরণ হিসাবে বিবেচনা করুন।


6
where T : IAggregateRoot- এটি আমার দিনটি তৈরি করেছে
ক্রিশ্চিয়ান ই।

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

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

আইএগ্রগ্রেট রুট কৌশলটি মাইক্রোসফ্টের ডকুমেন্টেশনগুলিতে দেখায়: ডকস.মাইক্রোসফট
স্যামুয়েল ড্যানিয়েলসন

16

আপনি যদি কোনও ডাটাবেস-প্রথম পদ্ধতির অনুসরণ করেন তবে আপনি সমষ্টিগত মূলটি সাধারণত 1-বহু সম্পর্কের 1 পাশে থাকা টেবিল।

একজন ব্যক্তি হওয়া সবচেয়ে সাধারণ উদাহরণ। প্রতিটি ব্যক্তির অনেক ঠিকানা, এক বা একাধিক বেতন স্লিপ, চালান, সিআরএম এন্ট্রি ইত্যাদি থাকে It's এটি সবসময় হয় না, তবে এটি 9-10 বার হয়।

আমরা বর্তমানে একটি ই-বাণিজ্য প্ল্যাটফর্মে কাজ করছি, এবং আমাদের মূলত দুটি সমষ্টিগত শিকড় রয়েছে:

  1. গ্রাহকরা
  2. বিক্রেতাদের

গ্রাহকরা যোগাযোগের তথ্য সরবরাহ করে, আমরা তাদের লেনদেনগুলি অর্পণ করি, লেনদেনগুলি লাইন আইটেমগুলি পেয়ে থাকে ইত্যাদি

বিক্রেতারা পণ্য বিক্রয় করে, যোগাযোগের লোক থাকে, আমাদের সম্পর্কে পৃষ্ঠা, বিশেষ অফার ইত্যাদি

এগুলি যথাযথভাবে গ্রাহক এবং বিক্রয়কর্মী দ্বারা যত্ন নেওয়া হয়।


8
আপনি যদি কোনও ডাটাবেস-প্রথম পদ্ধতির অনুসরণ করেন তবে আপনি ডোমেন চালিত ডিজাইনের অনুশীলন করছেন না, আপনি ডেটা ড্রাইভড ডিজাইন অনুসরণ করছেন।
সিনায়েস্টিক

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

12

দীণাকে:

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

এখানে চিত্র বর্ণনা লিখুন


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

2
@ জর্জিএফজি আসল উত্তরটি কারওর কাছে মোটামুটি কোনও ধরণের ক্লু নেই। চারপাশে অনেকগুলি বিরোধী তথ্য রয়েছে।
মার্ডক্সেক্স

3
শিশু সত্তা সমষ্টি নয়, তারা কেবলমাত্র সত্তা যা সামগ্রিক গোষ্ঠী নিয়ন্ত্রণ করে এমন সামগ্রীর সদস্য হতে পারে। একটি "সমষ্টি" সত্ত্বার একটি যৌক্তিক গোষ্ঠীকরণ।
সিনায়েস্টিক

@ জর্জিএফজি এটি আপনার নকশার সীমানা প্রসঙ্গে নির্ভর করে। আপনি যদি গাড়ি বিক্রেতা হন, তবে কার্শপের মতো কিছু সামগ্রিক মূল হয়ে যায়, এবং এর নীচে গাড়িগুলি অনুসরণ করে ...
jokab

8

একটি ভাঙা লিঙ্ক থেকে :

একটি সমষ্টি মধ্যে একটি সমষ্টিগত রুট আছে। সমষ্টিগত রুট সমষ্টিগুলির মধ্যে অন্যান্য সমস্ত সত্ত্বা এবং মান অবজেক্টের প্যারেন্ট সত্তা।

একটি সংগ্রহস্থল একটি সমষ্টিগত রুটে পরিচালনা করে।

আরও তথ্য এখানে পাওয়া যাবে


4
ধন্যবাদ. এটি অবশ্যই সবচেয়ে সাধারণ এবং হতাশার ভাঙা লিঙ্ক যা আমি ক্রমাগত জুড়ে চলেছি।
দিনাহ

এছাড়াও, শব্দটি পিছনের দিকে মনে হয়। মূলটি কীভাবে আগ্রাসনের মধ্যে থাকতে পারে এবং একই সময়ে এটি পিতামাতার হতে পারে?
সিনেটেস্টেটিক

1
সমষ্টিগত রুট মূল শ্রেণি। প্লেইন সমষ্টি সর্বদা একটি সমষ্টি মূলের মধ্যে থাকে। উপরে পোজ করা ডায়াগ্রামটি ব্যবহার করে ... গ্রাহক হলেন সমষ্টিগত রুট। গ্রাহক এক বা একাধিক গাড়ির মালিক হতে পারেন। গ্রাহক সম্পর্কিত ক্ষেত্রে গাড়িগুলি সমষ্টিগত। গাড়িগুলির একটি ইঞ্জিন রয়েছে। ইঞ্জিনটি মোট সমষ্টিতে থাকা একটি সমষ্টি। গ্রাহককে কী একটি সামগ্রিক মূল তৈরি করে তা হ'ল মডেলের ধারণাটি যে কোনও গাড়ীর অ্যাক্সেস বা এর উপাদানগুলি সর্বদা গাড়ির মালিক তার গ্রাহকের মাধ্যমে থাকে।
ইব্রাহিম মলুফ

8

সমষ্টিগত অর্থ কোনও কিছুর সংগ্রহ।
মূল হ'ল গাছের উপরের নোডের মতো, যেখান থেকে আমরা <html>ওয়েব পৃষ্ঠার নথিতে নোডের মতো সমস্ত কিছু অ্যাক্সেস করতে পারি ।
ব্লগ অ্যানালজি, একজন ব্যবহারকারীর অনেকগুলি পোস্ট থাকতে পারে এবং প্রতিটি পোস্টে অনেক মন্তব্য থাকতে পারে। সুতরাং আমরা যদি কোনও ব্যবহারকারীর আনয়ন করি তবে এটি সম্পর্কিত সমস্ত পোস্ট এবং সেই পোস্টগুলির আরও মন্তব্যগুলিতে অ্যাক্সেসের জন্য রুট হিসাবে কাজ করতে পারে। এগুলি সবাই একত্রিত হয়ে সংগ্রহ বা সমষ্টি হিসাবে বলা হয়


1

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


-1

এরলং-এ সমষ্টিগুলির মধ্যে পার্থক্য করার দরকার নেই, একবার সমষ্টি রাজ্যের অভ্যন্তরে ডেটা স্ট্রাকচার দ্বারা রচনা করা হয়, ওও রচনার পরিবর্তে। একটি উদাহরণ দেখুন: https://github.com/bryanhunter/cqrs-with-erlang/tree/ndc-london

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