মান বনাম সত্তা অবজেক্টস (ডোমেন চালিত ডিজাইন)


92

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


4
এখানে আমি দুজনের মধ্যে পার্থক্যের একটি সম্পূর্ণ (আইএমও) তালিকা লিখেছি: enterprisecraftsmanship.com/2016/01/11/…
ভ্লাদিমির

উত্তর:


109

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

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

তবে গ্রাহকের মতো সত্তার কিছু বৈশিষ্ট্য পরিবর্তন করা গ্রাহককে ধ্বংস করে না; গ্রাহক সত্তা সাধারণত পরিবর্তনযোগ্য। পরিচয়টি একই থাকে (অন্তত একবার অব্যাহত রাখার পরে)।

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

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


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

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

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

40

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

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

পার্থক্য তৈরির একটি সহজ উপায় হ'ল মান অবজেক্টগুলিকে স্থিতিশীল ডেটা হিসাবে ভাবা যা কখনও পরিবর্তন হয় না এবং আপনার অ্যাপ্লিকেশনে ডেভলপ হয় এমন ডেটা হিসাবে সত্তা থাকে।


7

মান প্রকার:

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

সত্ত্বা:

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

ডিডিডি সম্পর্কিত নয় :(
হায়ডটেকি

6

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

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

এই শব্দ ঠিক আছে? আমার অবশ্যই বলতে হবে যে আমি / ডিডিডি বইটি পড়ে এই পার্থক্য সম্পর্কে এখনও বিভ্রান্ত ছিলাম।

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


4
"এই ক্ষেত্রে নিন: আপনি আপনার বাড়িতে অন্য কিছু লোকের সাথে বসবাস করছেন we যদি আমরা ঠিকানার জন্য সত্তা ব্যবহার করি, তবে আমি যুক্তি দেব যে এখানে একটি অনন্য ঠিকানা থাকবে যা সমস্ত ব্যক্তি অবজেক্টের সাথে লিঙ্ক করে"। আমি মনে করি those লোকগুলির প্রত্যেকেরই এটির নিজস্ব উদাহরণ রয়েছে, তবে তারা কেবল সমান হয়ে যায় (এটি তাদের প্রত্যেকের মতো 5 ডলারের নোট থাকতে পারে, তবে এর অর্থ এই নয় যে এটি একই নোট)
প্রোকুরার্স

"তবে এর অর্থ এই নয় যে এটি একই নোট" - আমার ধারণা এটি কোনও নোটকে অতিরিক্ত সম্পত্তি বরাদ্দ করে না দেয় কিনা তার উপর নির্ভর করে (যেমন নির্গত তারিখ, মহাকাশে শারীরিক অবস্থান ইত্যাদি); অন্যথায় তারা একই হবে। এবং আমি অনুমান করি সফ্টওয়্যারটির জন্য একই: ঠিকানাটি আমাদের প্রয়োজন / বিবেচনা করতে চাই এমন বৈশিষ্ট্যের উপর ভিত্তি করে একই or
adrhc

4

ঠিকানা সত্তা বা মান অবজেক্ট হতে পারে যা ব্যাসেস প্রক্রিয়া নির্ভর করে। ঠিকানা অবজেক্ট কুরিয়ার সার্ভিস অ্যাপ্লিকেশনটিতে সত্তা হতে পারে তবে ঠিকানাটি অন্য কোনও অ্যাপ্লিকেশনে মান বস্তু হতে পারে। কুরিয়ার অ্যাপ্লিকেশন পরিচয় ঠিকানা ঠিকানা জন্য


2

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

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

এখন আমার সমস্যাগুলি হ'ল, 1) এটি যুক্তিসঙ্গত এবং 2) বৈশিষ্ট্যগুলি সম্পর্কে প্রচুর কোডের নকল না করে এটি করা ভাল।


1

মধ্যে 3 পার্থক্য EntitiesএবংValue Objects

  • আইডেন্টিফায়ার বনাম কাঠামোগত সাম্য: সত্তাগুলির শনাক্তকারী থাকে, সত্তাগুলির যদি একই শনাক্তকারী থাকে তবে সত্তা একই। হাতের ওপারের মান অবজেক্টগুলির কাঠামোগত সাম্য রয়েছে, সমস্ত ক্ষেত্র সমান হলে আমরা দুটি মান বস্তুকে সমান বিবেচনা করি। মান বস্তুর সনাক্তকারী থাকতে পারে না।

  • পরিবর্তনশীলতা বনাম অপরিবর্তনীয়তা: মান অবজেক্টগুলি অপরিবর্তনীয় ডেটা স্ট্রাকচার যেখানে অস্তিত্বগুলি তাদের জীবনকালে পরিবর্তন হয়।

  • জীবনকাল: মান অবজেক্টস সত্তাদের অন্তর্ভুক্ত হওয়া উচিত


1

খুব সাধারণ বাক্যে আমি বলতে পারি, আমাদের তিন ধরণের সাম্য রয়েছে:

  • শনাক্তকারী সমতা : একটি শ্রেণিতে আইডি ফাইল হয়েছে এবং দুটি আইটেমকে তাদের আইডি ক্ষেত্রের মানের সাথে তুলনা করা হয়।
  • রেফারেন্স সমতা : দুটি বস্তুর কোনও রেফারেন্সের মেমরিতে একই ঠিকানা থাকলে।
  • কাঠামোগত সাম্য : দুটি বস্তু সমান হয় যদি তাদের সমস্ত সদস্যের মিল হয়।

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

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