আসুন আরেকটি উদাহরণ নিই যা ধারণা এবং প্রত্যাশার সাথে কম পরিপূর্ণ। আমি এখানে একটি এনাম পেয়েছি এবং এটি একটি বাগের জন্য অগ্রাধিকারের সেট।
আপনি ডাটাবেসে কি মান সংরক্ষণ করছেন?
তাই, আমি সংরক্ষণকারী যেতে পারে 'C'
, 'H'
, 'M'
, এবং 'L'
ডাটাবেসের মধ্যে। বা 'HIGH'
ইত্যাদি। এতে স্ট্রাইলি-টাইপ করা ডেটার সমস্যা রয়েছে । বৈধ মানগুলির একটি জ্ঞাত সেট রয়েছে এবং আপনি যদি সেই সেটটি ডাটাবেসে সংরক্ষণ না করে থাকেন তবে এটির সাথে কাজ করা কঠিন হতে পারে।
আপনি কোডে ডেটা সংরক্ষণ করছেন কেন?
কোডটিতে আপনি পেয়েছেন List<String> priorities = {'CRITICAL', 'HIGH', 'MEDIUM', 'LOW'};
বা সেটির কোনও কিছু পেয়েছেন । এর অর্থ হল যে আপনি এই ডেটাটির বিভিন্ন ম্যাপিংগুলি যথাযথ বিন্যাসে পেয়েছেন (আপনি ডাটাবেসে সমস্ত ক্যাপ সন্নিবেশ করিয়েছেন তবে আপনি এটি হিসাবে প্রদর্শন করছেন Critical
)। আপনার কোড এখন স্থানীয়করণ করাও কঠিন। আপনি ধারণায় থাকা স্ট্রিংয়ের সাথে ধারণার ডেটাবেস উপস্থাপনাকে আবদ্ধ করেছেন।
আপনার এই তালিকাটি অ্যাক্সেস করার জন্য যে কোনও জায়গায় আপনার কোডের সদৃশতা বা একগুচ্ছ ধ্রুবক সহ একটি শ্রেণি থাকা দরকার। যার কোনটিই ভাল বিকল্প নয়। এটিকেও ভুলে যাওয়া উচিত নয় যে অন্যান্য অ্যাপ্লিকেশন রয়েছে যা এই ডেটা ব্যবহার করতে পারে (যা অন্যান্য ভাষায় লিখিত হতে পারে - জাভা ওয়েব অ্যাপ্লিকেশনটিতে একটি স্ফটিক রিপোর্টস রিপোর্টিং সিস্টেম ব্যবহৃত হয়েছে এবং এতে পার্ল ব্যাচের কাজ ফিডিং ডেটা রয়েছে)। রিপোর্টিং ইঞ্জিনটি তথ্যের বৈধ তালিকা জানতে হবে ( 'LOW'
অগ্রাধিকার হিসাবে চিহ্নিত কিছু না হলে কী হয় এবং আপনি যে রিপোর্টের জন্য একটি বৈধ অগ্রাধিকার তা জানতে হবে?), এবং ব্যাচের কাজের ক্ষেত্রে বৈধ কী সম্পর্কিত তথ্য থাকবে মান হয়।
হাইপোটিক্যালি আপনি বলতে পারেন যে "আমরা একক ভাষার দোকান - সবকিছু জাভাতে লেখা আছে" এবং একটি একক জার রয়েছে যা এই তথ্যগুলিকে ধারণ করে - তবে এখন এর অর্থ হল যে আপনার অ্যাপ্লিকেশনগুলি একে অপরের সাথে দৃly়ভাবে মিলিত হয়েছে এবং এতে জাজার রয়েছে তথ্যটি. প্রতিবার পরিবর্তন আসার সাথে সাথে ওয়েব অ্যাপ্লিকেশন সহ আপনাকে প্রতিবেদনের অংশ এবং ব্যাচ আপডেট অংশটি প্রকাশ করতে হবে - এবং আশা করি যে রিলিজটি সমস্ত অংশের জন্য সহজেই চলে।
আপনার বস যখন অন্য অগ্রাধিকার চান তখন কী ঘটে?
তোমার বস আজ এসেছিল। একটি নতুন অগ্রাধিকার আছে - CEO
। এখন আপনাকে যেতে হবে এবং সমস্ত কোড পরিবর্তন করতে হবে এবং একটি পুনর্নির্মাণ এবং পুনর্নির্মাণ করতে হবে।
একটি 'এনাম-ইন-দ্য-টেবিল' পদ্ধতির সাথে, আপনি নতুন অগ্রাধিকার পেতে এনাম তালিকাটি আপডেট করেন। তালিকাটি প্রাপ্ত সমস্ত কোড এটি ডাটাবেস থেকে টেনে তোলে।
ডেটা খুব কমই একা দাঁড়িয়ে থাকে
অগ্রাধিকার সহ, অন্যান্য টেবিলে ডেটা কীগুলিতে ওয়ার্কফ্লো সম্পর্কে তথ্য থাকতে পারে, বা কে এই অগ্রাধিকারটি সেট করতে পারে বা কী নন।
কিছুটা ক্ষেত্রে প্রশ্নে উল্লিখিত লিঙ্গটিতে ফিরে যাওয়া: লিঙ্গটির ব্যবহারের সর্বনামগুলির একটি লিঙ্ক রয়েছে: he/his/him
এবং she/hers/her
... এবং আপনি কোডটিতে নিজেরাই কঠোর কোডিং এড়াতে চান। এবং তারপরে আপনার বস আসবেন এবং আপনাকে 'OTHER'
লিঙ্গটি যুক্ত করতে হবে (এটিকে সহজ রাখতে) এবং আপনার এই লিঙ্গটির সাথে সম্পর্কিত হওয়া দরকার they/their/them
... এবং আপনার বস ফেসবুকের কী আছে এবং ... ভাল, হ্যাঁ তা দেখেন।
নিজেকে এনাম টেবিলের চেয়ে নিজেকে স্ট্রাই-টাইপড বিটের কাছে সীমাবদ্ধ করে, ডেটা এবং এর অন্যান্য বিটের মধ্যে এই সম্পর্ক বজায় রাখতে এখন আপনাকে সেই স্ট্রিংটিকে অন্য টেবিলের গুচ্ছের মধ্যে প্রতিলিপি তৈরি করতে হবে।
অন্যান্য ডেটাস্টোরের কী হবে?
আপনি এটি কোথায় সঞ্চয় করেন তা বিবেচনা না করে একই নীতিটি বিদ্যমান।
- আপনার কাছে একটি ফাইল থাকতে পারে
priorities.prop
, এটিতে অগ্রাধিকারের তালিকা রয়েছে। আপনি কোনও সম্পত্তি ফাইল থেকে এই তালিকাটি পড়েছেন।
আপনার কাছে একটি ডকুমেন্ট স্টোর ডাটাবেস থাকতে পারে (যেমন কাউচডিবি ) যাতে প্রবেশের জন্য enums
(এবং তারপরে জাভাস্ক্রিপ্টে একটি বৈধকরণ ফাংশন লিখুন ):
{
"_id": "c18b0756c3c08d8fceb5bcddd60006f4",
"_rev": "1-c89f76e36b740e9b899a4bffab44e1c2",
"priorities": [ "critical", "high", "medium", "low" ],
"severities": [ "blocker", "bad", "annoying", "cosmetic" ]
}
আপনার কাছে কিছুটা স্কিমা সহ একটি এক্সএমএল ফাইল থাকতে পারে:
<xs:element name="priority" type="priorityType"/>
<xs:simpleType name="priorityType">
<xs:restriction base="xs:string">
<xs:enumeration value="critical"/>
<xs:enumeration value="high"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="low"/>
</xs:restriction>
</xs:simpleType>
মূল ধারণাটি একই। ডেটা স্টোর নিজেই যেখানে বৈধ মানগুলির তালিকা সংরক্ষণ এবং প্রয়োগ করা প্রয়োজন। এটি এখানে রেখে, কোড এবং ডেটা সম্পর্কে যুক্তি করা সহজ। আপনার প্রতিবার যা আছে তা ডিফেন্সিয়ালি যাচাই করার বিষয়ে আপনাকে চিন্তা করতে হবে না (এটি কি আপার কেস বা কম? chritical
এই কলামে কেন একটি প্রকার আছে? ইত্যাদি ...) কারণ আপনি জানেন যে ডেটাস্টোর থেকে আপনি কী ফিরে পাচ্ছেন? ডেটাস্টোর আপনাকে অন্যথায় প্রেরণের জন্য ঠিক কী প্রত্যাশা করে - এবং আপনি বৈধ মানগুলির তালিকার জন্য ডেটাস্টোরকে জিজ্ঞাসা করতে পারেন।
টেকওয়ে
বৈধ মানগুলির সেটটি ডেটা , কোড নয়। আপনি কি জন্য সংগ্রাম প্রয়োজন শুকনো কোড - কিন্তু অনুলিপি ইস্যু আপনি অনুরূপ হয় ডেটা বরং তথ্য হিসাবে তার জায়গা সম্মান এবং একটি ডাটাবেসের মধ্যে এটি সংরক্ষণ করার পরিবর্তে, কোডে।
এটি ডেটাস্টোরের বিরুদ্ধে একাধিক অ্যাপ্লিকেশন লিখনকে আরও সহজ করে তোলে এবং ডেটাতে নিজেরাই দৃled়ভাবে সংযুক্ত সমস্ত কিছু স্থাপন করা দরকার এমন দৃষ্টান্তগুলি এড়িয়ে চলে - কারণ আপনি আপনার কোডটি ডেটাতে সংযুক্ত করেন নি ।
এটি পরীক্ষামূলক অ্যাপ্লিকেশনগুলিকে সহজ করে তোলে কারণ CEO
অগ্রাধিকার যুক্ত হওয়ার সময় আপনাকে পুরো অ্যাপ্লিকেশনটির পুনরায় পরীক্ষা করতে হবে না - কারণ আপনার কাছে এমন কোনও কোড নেই যা অগ্রাধিকারের আসল মান সম্পর্কে চিন্তা করে।
একে অপরের থেকে স্বাধীনভাবে কোড এবং ডেটা সম্পর্কে যুক্তিযুক্ত হতে সক্ষম হওয়া রক্ষণাবেক্ষণ করার সময় বাগগুলি খুঁজে পেতে এবং এটি ঠিক করা সহজ করে।