সামগ্রিক সীমানা ডিজাইন কিভাবে?


10

আমি একটি অ্যাপ্লিকেশন ইকমার্স মত কিছু লিখতে চাই।

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

বিভাগ - এটি "ইলেকট্রনিক্স> কম্পিউটার" অর্থাত্ পণ্যের ধরণের মতো। বিভাগসমূহে বৈশিষ্ট্যের একটি তালিকা রয়েছে (তালিকা <সম্পত্তি>)।

সম্পত্তি - স্বতন্ত্র সত্তা যাতে নাম, পরিমাপের একক, ডেটা ধরণের থাকে। উদাহরণস্বরূপ "নাম", "ওজন", "পর্দার আকার"। একই সম্পত্তি বিভিন্ন পণ্য থাকতে পারে।

পণ্য - সুনির্দিষ্ট বৈশিষ্ট্য সম্পর্কিত মান এবং তালিকা রয়েছে। মান হ'ল একটি বস্তু যা সম্পত্তির কেবলমাত্র মান ক্ষেত্র এবং ফিল্ড আইডি ধারণ করে।

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

ঠিক আছে পরবর্তী ধাপে আমি পৃথক সম্পত্তি পৃথক সমষ্টিতে স্থির করেছিলাম তবে তারপরে এটি সহজ সত্তা সহ একটি তালিকা হবে।

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

এই ব্যবসায়িক কেসটি ডিজাইনের বিকল্পগুলি কী কী?


আপনি একটি বিভাগ, সম্পত্তি এবং পণ্য আরও সম্পূর্ণ উদাহরণ প্রদান করতে পারেন? ইলেক্ট্রনিক্স বা কম্পিউটারগুলি একটি বিভাগ হবে, আইফোন এক্স একটি পণ্যের উদাহরণ হতে পারে, এবং একটি সম্পত্তি ঠিক কী হবে? 11 "ইঞ্চি প্রদর্শন?
নীল

আপনি প্রায় সঠিক। আমি কিছু
স্পেসিফিকেশন

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

উত্তর:


7

DDD দৃষ্টিকোণ ইন, Category, Productএবং Propertyবস্তু তাদের নিজস্ব পরিচয় আছে সব মিলা তারা: সত্ত্বা হয়।

বিকল্প 1: আপনার আসল নকশা

আপনি Categoryএকক সামগ্রীর মূল তৈরি করেছেন। এক দিকে, এই জ্ঞান করে তোলে, কারণ সমষ্টিগত দৃঢ়তা নিশ্চিত করবে যখন তার বস্তু পরিবর্তিত হয়, এবং Productথাকতে হবে Propertiesতার এর Category:

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

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

  • একটি নির্দিষ্ট Productএকটি এবং শুধুমাত্র একটি সম্পর্কিত Category। যদি Categoryমুছে ফেলা হয়, তেমনি এটিও রয়েছে Products
  • একটি নির্দিষ্ট Propertyএক এবং শুধুমাত্র একটি অন্তর্গত Category। অন্যথায় বলা হয়েছে, "টিভি স্ক্রিন" এবং "কম্পিউটার মনিটর" দুটি শ্রেণি হতে পারে, "টিভি স্ক্রিন: আকার" এবং "কম্পিউটার মনিটর: আকার" দুটি পৃথক বৈশিষ্ট্য হবে।

দ্বিতীয় পয়েন্টটি আপনার বর্ণনার সাথে সামঞ্জস্যপূর্ণ নয়: " তবে যখন আমার কেবল নতুন Propertyশ্রেণি যুক্ত হওয়া দরকার যা কোনও বিভাগের অন্তর্ভুক্ত নয় " তখন আমি কী করব । একইটি Propertiesআলাদাভাবে ব্যবহার করা যায় কিনা তা পরিষ্কার নয় Categories

বিকল্প 2: সামগ্রীর বাইরে সম্পত্তি

যদি Propertyস্বতন্ত্রভাবে কোনও উপস্থিত থাকে তবে Categoriesতা অবশ্যই সামগ্রিকের বাইরে হওয়া উচিত। এবং যদি আপনি এর Propertiesমধ্যে ভাগ করতে চান তবে এটিই Categories(যা উচ্চতা, প্রস্থ, আকার, ইত্যাদির জন্য অর্থ দেয়)। এটি অবশ্যই মনে হয়।

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

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

নোট যে এই নকশা একটি আছে আপনি বাধা দেয় না List<Property>Categoryএকটি রেফারেন্স শব্দার্থিক (যেমন জাভা) সঙ্গে: তালিকার প্রতিটি উল্লেখকে একটি ভাগ করার যোগ্য বোঝায় Propertyএকটি সংগ্রহস্থলের মধ্যে অবজেক্ট।

এই নকশার একমাত্র সমস্যাটি হ'ল আপনি এটি পরিবর্তন Propertyবা মুছতে পারেন: এটি সামগ্রীর বাইরে থাকায় সমষ্টি তার আক্রমণকারীদের সামঞ্জস্যতার যত্ন নিতে পারে না। তবে এটি কোনও সমস্যা নয়। এটি ডিডিডি নীতিগুলির ফলাফল এবং বাস্তব বিশ্বের জটিলতা। এখানে এরিক ইভান্সের একটি উক্তি তাঁর সেমিনাল বই " ডোমেন-ড্রাইভড ডিজাইন: হার্ট ইন সফটওয়্যার ইন জটিল ":

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

সুতরাং হ্যাঁ, আপনি যদি কোনও পরিবর্তন করেন তবে আপনাকে Propertyনিশ্চিত করতে হবে যে কোনও পরিষেবা বিভাগের উল্লেখ করে যে বিভাগগুলি যাচাই করেছে তা প্রয়োজনীয় হিসাবে আপডেট হয়েছে।

বিকল্প 3: বিভাগে, সম্পত্তি এবং বিভিন্ন সামগ্রীতে পণ্য

আমি কেবল আশ্চর্য হয়েছি যে কোনওটির একটির Productঅন্তর্গত ধারণাটি Categoryযদি প্রতিষ্ঠিত হয়:

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

এটি সমষ্টিগুলি সরল করবে না এবং আপনার আরও আরও নিয়ম থাকবে যা সমষ্টিগুলিকে বিস্তৃত করে। তবে আপনার সিস্টেমটি ভবিষ্যতের আরও অনেক প্রমাণ হবে।


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

সংক্ষেপে @ জেটিটিক: হ্যাঁ, আপনার একটি স্বতন্ত্র সম্পত্তি সংগ্রহের প্রয়োজন। হয় আপনি বিভাগের কারখানায় বিদ্যমান সম্পত্তিগুলির একটি তালিকা পাস করুন, বা আপনি খালি বিভাগগুলি তৈরি করুন এবং একটি অ্যাডপ্রোপার্টি পদ্ধতিতে তালিকাটি তৈরি করুন। বিনিময়ে প্রশ্ন: আপনি "বাধ্যতামূলক" এবং "alচ্ছিক" বৈশিষ্ট্য থাকতে চান তা কল্পনা করুন এবং বাধ্যতামূলক বৈশিষ্ট্যটি বিভাগের উপর নির্ভর করে। আপনি কিভাবে এটি পরিচালনা করবেন?
ক্রিস্টোফ

আপনার প্রশ্নের উত্তরটি প্রথম যে বিষয়টি মনে আসে তা হ'ল আমি একটি বিশেষ সত্তা তৈরি করতে পারি Featureএবং এটি কেবলমাত্র মালিকানাধীন Product। এবং এই সত্তা অনুসন্ধানে অংশ নেবে না। তুমি কি বল?
সিফেই

@ জেটিটিক কেন নয়! আমি মানগুলিতে বর্তমানে যেমন পণ্যটিতে রেখেছি তেমনি এই বৈশিষ্ট্যটিকে বিভাগের সাথে যুক্ত করতে পারতাম। একটি বিভাগে n বৈশিষ্ট্য রয়েছে (এর সমষ্টিগত অংশ), একটি সম্পত্তি মি বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে (তবে লিঙ্কটি বিভাগ-> বৈশিষ্ট্যটির মধ্য দিয়ে যায়)। তারপরে আপনি সামগ্রিক সীমানাটি স্পষ্ট করে বহু থেকে বহু সম্পর্ককে আরও পরিচালনাযোগ্য উপাদানগুলিতে বিভক্ত করেছেন। অবশেষে সংগ্রহস্থল ইনজেকশন সম্পর্কে: আপনি পরিচয় অনুসারে অন্যান্য সংস্থাগুলি উল্লেখ করলে এটি প্রয়োজন হয় না (এই নিবন্ধটি informit.com/articles/article.aspx?p=2020371&seqNum=4 পড়ুন )
ক্রিস্টোফ

5

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

বিভাগ একটি বিশেষ ধরণের পণ্য

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

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

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

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

অনেকের সাথে অনেকের সম্পর্ক

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

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

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

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

উপসংহার

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

শুভকামনা!


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