ডিডিডি এবং মান অবজেক্টস। পরিবর্তনযোগ্য মান অবজেক্টগুলি নন অ্যাগ্রারের পক্ষে ভাল প্রার্থী। রুট সত্তা?


9

এখানে একটু সমস্যা আছে

একটি মান বস্তু সহ একটি সত্তা আছে। কোন সমস্যা নেই. আমি একটি নতুন মানের জন্য একটি মান বস্তুর প্রতিস্থাপন করি, তারপরে নিবারনেট নতুন মান সন্নিবেশ করায় এবং পুরানোটিকে এতিম করে, তারপরে এটি মুছবে। ঠিক আছে, এটি একটি সমস্যা।

বীমা করাটি আমার ডোমেনে আমার সত্তা। তাঁর ঠিকানা (মান অবজেক্টস) সংগ্রহ রয়েছে। ঠিকানাগুলির মধ্যে একটি হ'ল মেলিংএড্রেস। আমরা যখন মেইলিং ঠিকানাটি আপডেট করতে চাই, মিঃ ইভানস মতবাদের অনুসরণ করে, জিপকোডটি ভুল বলেছি, আমাদের অপরিবর্তনীয় (একটি মান বস্তুর অধিকার?) যেহেতু পুরানো অবজেক্টটি নতুনের জন্য প্রতিস্থাপন করতে হবে।

তবে আমরা সারিটি আপনি মুছে ফেলতে চাই না, কারণ সেই ঠিকানার পিকে কোনও মেলিংহিসটরি সারণীতে একটি এফকে। সুতরাং, মিঃ ইভান্স মতবাদ অনুসরণ করে, আমরা এখানে বেশ খারাপ করছি। যদি না আমি আমার ঠিকানাগুলি সত্তা তৈরি করি, সুতরাং আমাকে এটিকে "প্রতিস্থাপন" করতে হবে না, এবং পুরানো ভাল দিনের মতো কেবল এর পিনকোড সদস্যকে আপডেট করতে হবে।

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

আপনি কি একমত? মিঃ ইভান্সের কোনও মিউটেবল ভ্যালু অবজেক্ট থাকার অনুমতি আছে কি? বা একটি পরিবর্তনীয় মান বস্তু কোনও সত্তার প্রার্থী?

ধন্যবাদ


2
"মিলেটেবল ভ্যালু অবজেক্ট" বলে কিছু আছে কি? আমার কাছে সর্বদা ছাপ মানের জিনিসগুলি অপরিবর্তনীয় had
হার্বি

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

উত্তর:


8

সবকিছু একটি পরিচয় একটি সত্তা হওয়া উচিত যে, এবং সবকিছু যে নেই না একটি পরিচয় আছে একটি সহজ মান, অত: পর একটি মান অবজেক্ট।

মার্টিন ফাউলারের উদ্ধৃতি দিতে (যা এরিক ইভান্সকে ঘিরে দেয়)

  • সত্তা: অবজেক্টস যা ক পৃথক পরিচয় রয়েছে যা সময় এবং বিভিন্ন উপস্থাপনার মধ্য দিয়ে চলে। আপনি এগুলি "রেফারেন্স অবজেক্টস" নামেও ডাকেন।
  • মান অবজেক্ট: যে বিষয়গুলি কেবলমাত্র তাদের গুণাবলীর সংমিশ্রণ করে।

আপনার ঠিকানাটিকে একটি মান অবজেক্ট করার কারণ:

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

মেইলিংহিসটরি এন্ট্রি আমরা A764 কে 657 ঠিকানায় পাঠিয়েছি এর অর্থ হতে পারে আমরা গতকাল বোস্টনে A764 নিবন্ধটি প্রেরণ করেছি এবং আমরা আগামীকাল নিউ ইয়র্কে A764 নিবন্ধটি প্রেরণ করেছি

যদি মেইলিং ঠিকানাটি পরিবর্তন করতে হয় তবে পুরানোটি মুছতে হবে না। এটি রাখুন এবং এটিকে নিষ্ক্রিয় হিসাবে চিহ্নিত করুন এবং নতুনটিকে সক্রিয় হিসাবে চিহ্নিত করুন ।


অবশ্যই আপনি আপনার ঠিকানাটিকে সত্তা হিসাবে বিবেচনা করতে পারেন, তবে কেবলমাত্র এটি আপডেট করার সময় ঠিকানাটি উল্লেখ করা প্রকৃত স্থানটি পরিবর্তন করবে না, সুতরাং কেবল টাইপস সংশোধন করার অনুমতি দেয়।

আপনি যদি নিশ্চিত হন যে কোনও সত্তা ব্যবহার করার চেয়ে আপনি এটি নিশ্চিত করতে পারতেন।


তবে সেরা সমাধান আইএমএইচও হ'ল আপনার মেলিংয়ের ইতিহাসে কোনও ঠিকানা সত্ত্বাকে উল্লেখ না করে বরং নির্দিষ্ট ঠিকানাটি সরাসরি আপনার মেইলিং ইতিহাসের টেবিলে সংরক্ষণ করুন (মূলত ঠিকানাটির ডেটা অনুলিপি করা)।

এইভাবে, আপনি সর্বদা জানেন যে আপনি আপনার জিনিসপত্র কোথায় প্রেরণ করেছেন (বা আপনি যে কোনও কিছুই মেলিং করছেন) এবং যেহেতু আপনি একটি পরিবর্তনীয় সত্তা ব্যবহার করবেন তাই আপনার ঠিকানা সারণী বিশৃঙ্খলা হবে না।

আমি বেশ কয়েকটি ইআরপি সিস্টেমে / এর সাথে কাজ করেছি এবং প্রায় সকলেই এই পদ্ধতির ব্যবহার করেছি।

আপনার ডাটাবেসে আপনার কিছু অতিরিক্ত কাজ হবে তবে এটি সবচেয়ে ব্যবহারিক উপায়ে আইএমএইচও।


এটি সম্ভবত সবচেয়ে মাথাব্যথা মুক্ত সমাধান। কেবলমাত্র যদি আপনি প্রত্যাশা করেন যে ভবিষ্যতের যোগাযোগ চ্যানেলগুলির জন্য অতিরিক্ত কলামগুলির প্রয়োজন হবে এবং আপনার ডাটাবেসটি খুব বড় ALTER, পৃথক সারণীতে সত্তা ব্যবহার করা প্রয়োজনীয় হয়ে উঠতে পারে। এগুলি, পরিবর্তে, আপনার প্রশ্নের মধ্যে "সর্বদা নতুন ঠিকানা / ফোন / ই-মেইলে যোগদান" এর মতো কৌশলগুলির জন্য আহ্বান জানায় SELECT, যা বজায় রাখতে সক্ষম এবং দক্ষ রাখতে চ্যালেঞ্জকামী । যদি সম্ভব হয় তবে এটি সহজ রাখুন।
টিমো

@ টিমো "সর্বদা নতুন ঠিকানা / ফোন / ই-মেইলে যোগদান করুন" আপনি যদি কেবল একটি- activeফ্ল্যাশ যুক্ত করে আপনার ডেটাটিকে কিছুটা অস্বীকৃত করেন তবে কঠিন নয়। অবশ্যই আপনাকে অবশ্যই সর্বদা and active = trueআপনার যোগদানের ক্ষেত্রে ব্যবহার করতে হবে, পতাকাটি আপ টু ডেট রাখুন এবং আপনার টেবিলের সাথে একটি কনট্রিন্ট যুক্ত করুন যাতে প্রতিটি গ্রাহকের জন্য কেবল একটি ইমেলই এই পতাকাটিকে সত্য হিসাবে সেট করতে পারে।
অলস

এটি পূর্ববর্তীটিকে নিষ্ক্রিয় করার সমস্যাটির পরিচয় দেয়। যদি আপনি কোডে আপনার উদাহরণের "বর্তমান" ঠিকানা বস্তুটি প্রতিস্থাপন করে থাকেন এবং আপনি আপনার ডেটা অ্যাক্সেস কোডে যান, তবে এটি জানতে পারবে না (1) নতুন আছে কি নেই, বা (2) সম্ভাব্য পুরানো কী এক ছিল। সুতরাং প্রতিটি সেভ অপারেশনকে "প্রথমে যান এবং ডাটাবেসের সমস্ত সম্পর্কিত ঠিকানা ডিএ্যাকটিভ" এর মতো কিছু কিছু করতে হবে, এবং তার সাথে বর্তমানের সংরক্ষণ করুন active=true। আমি এটাকেই সহজ বলব না, এ কারণেই আমি আপনার সমাধানটি পছন্দ করি।
টিমো

2

আমি 2 টি জিনিস দেখছি:

  1. ইতিহাসের রেকর্ডকে প্রভাবিত করার জন্য জিপ কোড পরিবর্তন করা কি ঠিক আছে? আমি মনে করি ইতিহাসের রেকর্ডটি পুরানো, অপরিবর্তিত ঠিকানার দিকে নির্দেশ করা যৌক্তিক হবে, তাই আপনি জানেন যে আপনি এটি ভুল ঠিকানায় প্রেরণ করেছেন।

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


2

আইএমও ঠিকানা বস্তুটি আপনার ডোমেনের একটি সত্তা। এটি একাধিক সত্তা দ্বারা ভাগ করা আছে, এর নিজস্ব পরিচয় রয়েছে এবং এটি সিস্টেম জুড়ে অনন্য।

ইভান্স বলেছেন:

প্রাথমিকভাবে এটির পরিচয় দ্বারা সংজ্ঞায়িত কোনও বস্তুকে সত্তা বলা হয়।


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

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

1
"অ্যাড্রেস অবজেক্ট ... এর নিজস্ব পরিচয় আছে" - কোনও ঠিকানার কোন বৈশিষ্ট্য এটি স্বতন্ত্রভাবে চিহ্নিত করে? কোনও ঠিকানার কোনও একক বৈশিষ্ট্য অনন্য নয়, তবে বৈশিষ্ট্যের সংমিশ্রণটি পরিচয় হিসাবে কাজ করে। এটি কোনও মান অবজেক্টের
ম্যাটড্যাভি

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

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