ব্যবসায়িক যুক্তিতে ডাটাবেসের মানগুলি উল্লেখ করা


43

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

1 Apple 
2 Banana 
3 Grapes

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

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

// Hard coded name
if (user.FavouriteFruit.Name == "Grapes")

// Hard coded ID
if (user.FavoriteFruit.ID == 3) // Grapes

// Duplicate the list of fruits in an enum
if (user.FavouriteFruit.ID == (int)Fruits.Grapes)

অথবা অন্য কিছু?

কারণ অবশ্যই অ্যাপ্লিকেশন জুড়ে ফ্যাভোরাইটফুট ব্যবহার করা হবে, তালিকাটি যুক্ত হতে পারে বা সম্পাদিত হতে পারে।

কেউ সিদ্ধান্ত নিতে পারেন যে তারা 'দ্রাক্ষা' নামকরণ করে 'গ্রেপ' রাখতে চান এবং এটি অবশ্যই হার্ডকোডযুক্ত স্ট্রিং বিকল্পটি ভঙ্গ করে।

হার্ডকোডযুক্ত আইডি সম্পূর্ণরূপে পরিষ্কার নয়, যেমন দেখানো হয়েছে আপনি এটি কোন আইটেমটি তাড়াতাড়ি সনাক্ত করতে একটি মন্তব্য যুক্ত করতে পারেন।

এনাম বিকল্পের মধ্যে ডাটাবেস থেকে নকল তথ্য জড়িত যা ভুল বলে মনে হচ্ছে এটি সিঙ্ক থেকে বেরিয়ে যেতে পারে।

যাইহোক, কোনও মন্তব্য বা পরামর্শের জন্য অগ্রিম ধন্যবাদ।


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

1
আমি @ মাইক নাকিসকে আপনার প্রিললোড হওয়া অবজেক্টগুলি একবারে দিতে যাচ্ছি যদিও এটি উভয় বিশ্বের সেরা বলে মনে হচ্ছে।
কেট

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

1
এনাম বিকল্পের মধ্যে ডাটাবেস থেকে নকল তথ্য জড়িত যা ভুল বলে মনে হচ্ছে এটি সিঙ্ক থেকে বেরিয়ে যেতে পারে। আমি আসলে এটি পছন্দ করি। এটি ডাবল এন্ট্রি বুককিপিংয়ের মতো। খাতাটির উভয় দিক যদি ভারসাম্য না রাখে তবে আপনি বুঝতে পারবেন যে কিছু ভুল। এটি বিষয়গুলিকে আরও ইচ্ছাকৃত করে তোলে।
রাডারবাব

1
হুমম ... যদি কোনও স্ট্রিংয়ের সাথে আইডির 1: 1 সম্পর্ক থাকে তবে এটি অনর্থক এবং উভয়কেই অর্থহীন। একটি স্ট্রিং একটি পূর্ণসংখ্যার পাশাপাশি একটি ডিবি কী হিসাবে পরিবেশন করতে পারে। MyApplication.Grape.IDতোতলা, তাই কথা। একটি "অ্যাপল" 3 "আইডি" এর চেয়ে বেশি "রেড_ অ্যাপল" নয় 4 সুতরাং "অ্যাপল" নামকরণ করে "রেড_অ্যাপল" নামকরণের সম্ভাবনা 3 কে 4 (এবং এমনকি 3) ঘোষণার চেয়ে বেশি বোঝাতে পারে না। একটি এনামের বিন্দুটি হল তার সংখ্যার ডিএনএ বিমূর্ত করা। তাই হয়তো এটা করার সময় সত্যিই decouple নির্বিচারে রিলেশনাল ডিবি কি যে আক্ষরিক কেউ এর ব্যবসা মডেল অর্থ আছে।
রাডারবব

উত্তর:


31

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

if( user.FavouriteFruit.ID == MyApplication.Grape.ID )

এখানে সবেমাত্র যা ঘটেছে তা হ'ল আমি স্পষ্টতই পুরো সারিটি Grapeমেমরির মধ্যে লোড করেছি , তাই এর আইডি তুলনাতে ব্যবহারের জন্য প্রস্তুত। আপনি যদি অবজেক্ট-রিলেশনাল ম্যাপিং (ওআরএম) ব্যবহার করছেন বলে মনে হয় তবে এটি আরও ভাল দেখাচ্ছে:

if( user.FavouriteFruit == MyApplication.Grape )

(এজন্যই আমি এটিকে "প্রিলোডেড অবজেক্টস" বলি))

সুতরাং, আমি যা করি তা হ'ল আমি প্রারম্ভকালীন সময়ে আমার সমস্ত "গণনা" টেবিলগুলি (সপ্তাহের দিনগুলির মতো ছোট টেবিলগুলি, বছরের মাসগুলি, জেন্ডারগুলি ইত্যাদি) মূল অ্যাপ্লিকেশন ডোমেন শ্রেণিতে লোড করি। আমি তাদের নাম দিয়ে লোড করেছি, কারণ স্পষ্টতই অবশ্যই MyApplication.Grape"গ্রেপ" নামক সারিটি গ্রহণ করতে হবে এবং আমি দৃsert়ভাবে বলছি যে তাদের প্রত্যেকটি পাওয়া গেছে। যদি তা না হয়, শুরু করার সময় আমাদের কাছে একটি গ্যারান্টিযুক্ত রান-টাইম ত্রুটি রয়েছে, যা সমস্ত রানটাইম ত্রুটির মধ্যে সর্বনিম্ন ম্যালিগন্যান্ট।


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

2
@ এসভিডজেন আপনি কি একমত হবেন না যে একই জায়গায় থাকা কোনও রেকর্ডের বিষয়বস্তু লোড করার জন্য, কেবল একবার বনাম-বাই-নাম পুরো জায়গাতেই ছড়িয়ে ছিটিয়ে বাইন্ডিং-বাইরের মধ্যে একটি মৌলিক পার্থক্য রয়েছে and শুরুতে, যেখানে রানটাইম ত্রুটিগুলি প্রায় সংকলন ত্রুটির মতো সৌম্য? যাইহোক, নাম দ্বারা সামান্যতম বাঁধাই এড়ানো উপায়গুলি সর্বদা আকর্ষণীয়, আপনি উল্লেখ করেছেন যে আবদ্ধতা সত্ত্বেও, তাই আপনার মনে কী আছে তা শুনতে আমি আগ্রহী be
মাইক নাকিস

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

1
@ user469104 পার্থক্যটি হ'ল আইডির পরিবর্তন হতে পারে এবং অ্যাপ্লিকেশনটি এখনও সমস্ত সারি সঠিকভাবে লোড করবে এবং সমস্ত তুলনা সঠিকভাবে সম্পাদন করবে। এছাড়াও, আপনি নিজের পছন্দ অনুসারে রিফ্যাক্টর কোড এবং সারিগুলির নাম পরিবর্তন করতে পারেন, এবং ঠিক করার জন্য আপনাকে যে জিনিসগুলি সন্ধান করতে হবে কেবলমাত্র সেই জায়গাটিই অ্যাপ্লিকেশনটির সূচনাতে রয়েছে এবং এটি খুব স্পষ্ট বলে মনে হয়: Grape = fetchRow( Fruit.class, NameColumn, "Grape" ); এবং যদি আপনি হন ভুলভাবে কিছু করুন, একটি AssertionErrorউইল আপনাকে জানাবে।
মাইক নকিস

1
@ গ্রাহাম্পার্কস enumএকটি ম্যাজিক স্ট্রিং না হয়ে থাকতে পারে না any বিন্দু সব বাঁধাই-নামে মাত্র এক জায়গায় ঘনত্ব , সূচনার সময় এটি সমস্ত বৈধতা এবং টাইপ নিরাপত্তা
মাইক নকিস

7

স্ট্রিংটির বিরুদ্ধে চেক করা সর্বাধিক পঠনযোগ্য, তবে এটি দ্বিগুণ কর্তব্য করে: এটি সনাক্তকারী এবং বিবরণ উভয় হিসাবে ব্যবহৃত হয় (যা সম্পর্কিত সম্পর্কযুক্ত কারণে পরিবর্তিত হতে পারে)।

আমি সাধারণত উভয় দায়িত্ব পৃথক ক্ষেত্রে বিভক্ত:

id  code    description
 1  grape   Grapes
 2  apple   Apple

যেখানে বিবরণ পরিবর্তন হতে পারে (তবে "আঙ্গুর" থেকে "কলা" নয়) তবে কোডটি কখনও পরিবর্তন করার অনুমতি নেই।

যদিও এটি বেশিরভাগ ক্ষেত্রেই হয় কারণ আমাদের আইডিস প্রায় সর্বদা স্বয়ংক্রিয়ভাবে উত্পাদিত হয় এবং এটি ভাল ফিট হয় না। আপনি যদি নিখরচায় আইডিগুলি চয়ন করতে পারেন তবে আপনি গ্যারান্টি দিতে পারেন যে সেগুলি সর্বদা সঠিক এবং সেগুলি ব্যবহার করে।

এছাড়াও, কেউ কতক্ষণ সত্যই "আঙ্গুর" থেকে "আঙ্গুর" এডিট করে? হয়তো এর কোনোটাই দরকার নেই।


8
আমি মনে করি না যে আরও বেশি অপ্রয়োজনীয় উত্তর হ'ল ...
রবি ডি

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

1
আমি অবশ্যই আপনার প্রিলোডড অবজেক্টগুলিকে পছন্দ করি তবে আপনার "আপেল" আলাদা করা থাকলে, আপনি যে কোনও পদ্ধতি বেছে নিন না কেন, আপনাকে সবকিছু দিয়ে যেতে হবে না?
রিমকো জারলিচ

এমনকি আন্তর্জাতিকীকরণের সমর্থনে বর্ণনার নামের জন্য আপনার আলাদা আলাদা টেবিল থাকতে পারে।
এরিক tদ

1
@ মাইকনাকিস এবং রিফ্যাক্টরিং মূলত আপনার পুরো কোডবেসের উপরে ফলের.প্রেস.প্লিন.গ্রাইন অ্যাপলের পরিবর্তে অনুসন্ধান এবং প্রতিস্থাপন। আমি যদি হার্ডকোডযুক্ত স্ট্রিংয়ের মানগুলি ব্যবহার করি তবে আমি একই কোড সম্পর্কে "আপেল "টিকে" গ্রিন_্যাপল "এর সাথে প্রতিস্থাপন করতে পুরো কোডবেজ জুড়ে একটি অনুসন্ধান এবং প্রতিস্থাপন করব। - রিফ্যাক্টরিং কেবল আরও ভাল বোধ করে কারণ আইডিই প্রতিস্থাপনটি করছে।
ফ্যালকো

4

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

কয়েকটি নিদর্শন আমি দেখেছি:

  • আপনার প্রোগ্রামের দিনটিকে নষ্ট করে এমন কোনও নতুন ডেটাবেস এন্ট্রি থেকে রক্ষা করতে এনামস + ডিফল্ট।
  • ডাটাবেসে নিজেই করতে হবে ক্রিয়াগুলির এনকোডিং (বিজ লজিক)। অনেক ক্ষেত্রে এটি খুব সম্ভব কারণ অনেকগুলি যুক্তি পুনরায় ব্যবহার করা হয়। যুক্তি বাস্তবায়ন প্রোগ্রামে হওয়া উচিত।
  • প্রোগ্রামটি ডানদিকে স্থাপন না করা পর্যন্ত প্রোগ্রামে ব্র্যান্ডের নতুন মানটিকে 'হতে হবে-উপেক্ষা করা' হিসাবে চিহ্নিত করতে অতিরিক্ত ডাটাবেসগুলিতে অতিরিক্ত বৈশিষ্ট্য / কলামগুলি।
  • কোড পাথের চারপাশে দ্রুত প্রক্রিয়া ব্যর্থ করে যা ডাটাবেস থেকে মানগুলি লোড করে / পুনরায় লোড করে। (যদি সংশ্লিষ্ট ক্রিয়াটি প্রোগ্রামে না থাকে এবং এটি উপেক্ষা করার চিহ্ন হিসাবে চিহ্নিত না হয় তবে রিফ্রেশ নেবেন না)।

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


4

এগুলি উভয় স্থানে (একটি টেবিল এবং একটি ENUM এ) সংরক্ষণ করা খুব খারাপ নয়। যুক্তিটি নিম্নলিখিত:

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

এএনএম হিসাবে তাদের সংরক্ষণ করাও বোধগম্য হয় কারণ আমরা যাদু স্ট্রিং ছাড়াই কোড লিখতে পারি এবং এটি কোডটি আরও পঠনযোগ্য করে তোলে। হ্যাঁ, তাদের সিঙ্ক করতে হবে তবে ENUM এ একটি লাইন এবং ডাটাবেসে একটি নতুন inোকানো বিবৃতি যুক্ত করা সত্যিই কত কঠিন hard

একটি জিনিস, একবার একটি ENUM সংজ্ঞায়িত হয়ে গেলে এর মান পরিবর্তন করবেন না। উদাহরণস্বরূপ, যদি আপনি:

  • আপেল
  • দ্রাক্ষা

আঙ্গুরের নাম আঙ্গুর রাখবেন না। কেবল একটি নতুন ENUM যুক্ত করুন।

  • আপেল
  • দ্রাক্ষা
  • আঙ্গুর

আপনার যদি ডেটা মাইগ্রেট করার দরকার হয়, তবে সমস্ত আঙ্গুরকে আঙ্গুরে সরানোর জন্য একটি আপডেট প্রয়োগ করুন।


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

1

আপনি এই প্রশ্নটি জিজ্ঞাসা করা ঠিক বলেছেন, আপনি ভুল শর্তগুলির মূল্যায়নের বিরুদ্ধে রক্ষা করার চেষ্টা করছেন বলে এটি একটি দুর্দান্ত প্রশ্ন।

এটি বলেছিল, মূল্যায়ন (আপনার ifশর্তাদি) অগত্যা আপনি কীভাবে এটি ঘটাবেন তার ফোকাস হওয়ার দরকার নেই। পরিবর্তে, আপনি যে পরিবর্তনগুলি 'সিঙ্কের বাইরে চলে যাওয়ার' কারণ হতে পারে তার প্রচারের দিকে মনোযোগ দিন।

স্ট্রিং অ্যাপ্রোচ

আপনার যদি অবশ্যই স্ট্রিং ব্যবহার করতে চান তবে ইউআইয়ের মাধ্যমে তালিকা পরিবর্তন করার কার্যকারিতাটি কেন প্রকাশ করবেন না? পরিবর্তন উপর যাতে সিস্টেমের নকশা Grapeকরার Grapes, উদাহরণস্বরূপ, আপনি রেকর্ডের সমস্ত বর্তমানে উল্লেখ আপডেট Grape

আইডি পদ্ধতির

কিছু পাঠযোগ্যতার সমঝোতা সত্ত্বেও আমি সর্বদা আইডি উল্লেখ করতে পছন্দ করি। The list may be added toআবার এমন কিছু হতে পারে আপনি যদি এমন একটি ইউআই বৈশিষ্ট্য প্রকাশ করেন তবে আপনাকে অবহিত করা হবে। আপনি যদি আইডি পরিবর্তন করে আইটেমগুলির পুনঃক্রমের সাথে উদ্বিগ্ন হন, আবার সমস্ত নির্ভরযোগ্য রেকর্ডে এ জাতীয় পরিবর্তন প্রচার করুন। একইভাবে উপরে। আরেকটি বিকল্প (যথাযথ নরমালাইজেশন কনভেনশন অনুসরণ করার পরে, আপনার এনাম / আইডি কলাম থাকতে হবে - এবং আরও বিশদ FruitDetailসারণী উল্লেখ করা হবে , যাতে আপনি দেখতে পারেন এমন একটি 'অর্ডার' কলাম রয়েছে)।

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


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

1
@ ক্লকওয়ার্ক-মিউজিক - কোন সমস্যা এড়াতে? এটা বোঝা যায় না।
JᴀʏMᴇᴇ

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

আপনি যদি আইডি পদ্ধতির সাথে যান তবে আপনি কীভাবে বিকাশ বনাম উত্পাদন ডেটাবেস ব্যবহার করবেন? স্ব-বর্ধিত আইডি সহ, উভয় ডিবিতে বিভিন্ন ক্রমে আইটেম যুক্ত করার ফলে বিভিন্ন আইডির ফলাফল হবে।
রক্ষক এক

যদিও অটো ইনক্রিমেন্ট হতে হবে না? এটি এই ক্ষেত্রে হওয়া উচিত নয়, বিশেষত যদি এটি অন্তর্নিহিত এনামের পূর্ণসংখ্যার মানটি আমরা ব্যবহার করি।
JᴇᴇMᴇᴇ

0

খুব সাধারণ সমস্যা। ডেটা ক্লায়েন্টের পক্ষটিকে নকল করার সময় DRY নীতিগুলি লঙ্ঘন করার মতো মনে হতে পারে , এটি স্তরগুলির মধ্যে দৃষ্টান্তের পার্থক্যের কারণে।

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

এটি কখনও কখনও অন্যভাবেও ঘটে। একটি নতুন এনাম মান ক্লায়েন্টের পক্ষে যুক্ত হয় তবে ডিবিএ পরিবর্তনগুলি প্রয়োগ করতে না পারলে ডিবি আপডেট হওয়া যায় না।


হ্যাঁ, আপনি সমস্যাটি বর্ণনা করেছেন। আপনার সমাধান কি?
রক্ষক এক

1
@Protectorone আপনি অনুমান সেখানে হয় একটি কবচ সমাধান যা আমার অভিজ্ঞতা একটি ভ্রান্ত ধৃষ্টতা হয়। আপনি সর্বোত্তম আশা করতে পারেন যে কিছু ব্যবসায়িক সত্তা সমস্যা ডোমেনের মালিক তাই কমপক্ষে আপনি দেখতে পাচ্ছেন কোন দিকটি পিছিয়ে রয়েছে - ক্লায়েন্টের পাশ বা ডাটাবেস দিক। ব্যাংকিং এবং ফিনান্স সাধারণত খাতটি যথেষ্ট কম হওয়ায় এ ক্ষেত্রে খুব দক্ষ ...
রবি ডি

0

ধরে নেওয়া যে আমরা মূলত একটি স্থিতিশীল দৃষ্টিভঙ্গি যা নিয়ে কথা বলছি তৃতীয় বিকল্প - এনাম - মূলত একমাত্র বুদ্ধিমান পছন্দ। ডাটাবেস জড়িত না থাকলে এটি আপনি কী করবেন তাই এটি বোঝা যায়।

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

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


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

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