প্রথমে কিছুটা ব্যাকগ্রাউন্ড। আমি বয়স -> রেট থেকে একটি কোড কোড করছি। এখানে 7 বয়সের বন্ধনী রয়েছে যাতে 7 সারি সহ লুকিং টেবিলটি 3 কলাম (| থেকে | রেট) হয়। মানগুলি খুব কমই পরিবর্তিত হয় - এগুলি আইন অনুসারে হার (প্রথম এবং তৃতীয় কলাম) যা 3 বছর ধরে একই থাকে। আমি অনুভব করেছি যে হার্ড-কোডিং ছাড়াই এই টেবিলটি সংরক্ষণের সবচেয়ে সহজ উপায়টি একটি সিএসভি সমন্বিত একক পাঠ্য মান হিসাবে বিশ্বব্যাপী কনফিগারেশন সারণিতে ডাটাবেসে রয়েছে (সুতরাং "65,69,0.05,70,74,0.06" কীভাবে হয় 65-69 এবং 70-74 স্তরগুলি সংরক্ষণ করা হবে)। তুলনামূলকভাবে পার্স করা সহজ তারপর ব্যবহার করুন।
তখন আমি বুঝতে পেরেছিলাম যে এটি বাস্তবায়নের জন্য আমাকে একটি নতুন টেবিল তৈরি করতে হবে, এটির চারপাশে মোড়ানোর জন্য একটি সংগ্রহস্থল, রেপোর জন্য ডেটা স্তর পরীক্ষা, টেবিলের মধ্যে সিএসভিকে অপসারণকারী কোডের চারপাশে ইউনিট পরীক্ষা, এবং নিজেই অনুসন্ধানের চারপাশে পরীক্ষা করতে হবে। এই সমস্ত কাজের একমাত্র সুবিধা হ'ল লুকিং টেবিলটিকে হার্ড-কোডিং এড়ানো।
ব্যবহারকারীদের সাথে কথা বলার সময় (যারা বর্তমানে অনুসন্ধানের টেবিলটি সরাসরি ব্যবহার করেন - একটি হার্ড কপির দিকে তাকিয়ে) মতামতটি বেশ বেশি যে "হারগুলি কখনই পরিবর্তন হয় না।" স্পষ্টতই এটি সঠিক নয় - এই হারগুলি কেবল তিন বছর আগে তৈরি হয়েছিল এবং অতীতে যে জিনিসগুলি "কখনই পরিবর্তন হয় না" পরিবর্তনের অভ্যাস ছিল - সুতরাং আমার পক্ষে এটির প্রতিরক্ষামূলকভাবে প্রোগ্রাম করার জন্য আমার অবশ্যই অনুসন্ধানের টেবিলটি সংরক্ষণ করা উচিত নয় আবেদনপত্র.
বাদে যখন আমি YAGNI মনে করি । আমি যে বৈশিষ্ট্যটি প্রয়োগ করছি সেটি হারের পরিবর্তন হবে তা নির্দিষ্ট করে না। যদি হারগুলি পরিবর্তন হয় তবে তারা এখনও খুব কমই পরিবর্তিত হবে যে রক্ষণাবেক্ষণ এমনকি বিবেচ্য নয়, এবং বৈশিষ্ট্যটি এতটা সমালোচনামূলক নয় যে হার পরিবর্তন এবং আপডেট হওয়া অ্যাপ্লিকেশনের মধ্যে দেরি হলে কোনও কিছুই ক্ষতিগ্রস্থ হবে।
আমি বেশ সিদ্ধান্ত নিয়েছি যে আমি যদি অনুসন্ধানের কোডটি কঠোরভাবে কোড করি তবে মূল্যবোধের কিছুই হারাবে না এবং আমি এই বিশেষ বৈশিষ্ট্যে আমার পদ্ধতির বিষয়ে খুব বেশি উদ্বিগ্ন নই। আমার প্রশ্ন, একজন পেশাদার হিসাবে আমি কি এই সিদ্ধান্তটিকে সঠিকভাবে সমর্থন করেছি? হার্ড-কোডিং মানগুলি খারাপ ডিজাইন, তবে অ্যাপ্লিকেশন থেকে মানগুলি সরিয়ে ফেলার সমস্যায় যেতে ইয়াজিএনআই নীতি লঙ্ঘন করছে বলে মনে হচ্ছে।
সম্পাদনা সম্পাদনা প্রশ্নটি পরিষ্কার করতে, আমি প্রকৃত বাস্তবায়ন সম্পর্কে উদ্বিগ্ন নই। আমি উদ্বিগ্ন যে আমি হয় দ্রুত, খারাপ কাজ করতে পারি এবং YAGNI বলে এটি ন্যায়সঙ্গত করতে পারি, বা আমি আরও প্রতিরক্ষামূলক, উচ্চ-প্রচেষ্টা পদ্ধতি গ্রহণ করতে পারি, সর্বোপরি সর্বোত্তম ক্ষেত্রেও কম সুবিধা রয়েছে। একজন পেশাদার প্রোগ্রামার হিসাবে আমি জানি যে কোনও ডিজাইনের ত্রুটিযুক্ত তা প্রয়োগ করার সিদ্ধান্তটি কি কেবল ব্যয় / উপকার বিশ্লেষণে নেমে আসে?
সম্পাদনা করুন যদিও সমস্ত উত্তর খুব আকর্ষণীয় ছিল বলে আমি মনে করি যে এটি কোনও ব্যক্তির নকশার পছন্দগুলিতে নেমে আসে, তবে আমি মনে করি সেরা উত্তরগুলি ছিল @ কর্বিন এবং @ ইজেড হার্টের, কারণ তারা এমন প্রশ্ন তুলে ধরেছিল যা আমি প্রশ্নে বিবেচনা করি নি:
- হার্ড কোডিং ব্যবহার করে 'দক্ষতার সাথে YAGNI প্রয়োগ করা' বনাম ডাটাবেসে সরিয়ে 'সঠিকভাবে কোডিং মানগুলি সঠিকভাবে মুছে ফেলার' এর ভ্রান্ত দ্বৈতত্ত্ব। অ্যাপ্লিকেশন কনফিগারেশনে লুকিং টেবিলটি রাখার তৃতীয় বিকল্প ছিল, যা সঠিক উপায়ে ওভারহেড ব্যয় করে না এবং YAGNI এর দক্ষতা ছাড়াই। আমরা সাধারণত / বা সিদ্ধান্তের মধ্যেই সীমাবদ্ধ নই এবং এটি পরে ব্যয় / উপকারের সিদ্ধান্তে নেমে আসে।
- কোড জেনারেশন হার্ড-কোডেড মানগুলিকে ডাটাবেসে সরিয়ে দেওয়ার ওভারহেড হ্রাস করতে পারে এবং এমন একটি উপায়ে যাতে আমার ওভার-ইঞ্জিনিয়ারড সিদ্ধান্তটি সারণিতে CSV প্রসেস করার জন্য সরিয়ে দেয়। সম্ভাব্যভাবে এটি উত্পন্ন কোডের সাথে দীর্ঘমেয়াদী রক্ষণাবেক্ষণের সমস্যাটি যুক্ত করে যদি অনুসন্ধান পদ্ধতির জন্য মৌলিক প্রয়োজনীয়তাগুলি পরিবর্তন হয়। এগুলি কেবল ব্যয় / উপকার বিশ্লেষণকেই প্রভাবিত করে এবং সম্ভবত এমনও যে আমার যদি স্বয়ংক্রিয়তাটি উপলব্ধ থাকে তবে আমি এই জাতীয় কোনও হার্ড-কোডিং বিবেচনাও করতাম না।
আমি @ কর্বিনের উত্তরটিকে সঠিক হিসাবে চিহ্নিত করছি কারণ এটি আমার উন্নয়নের ব্যয়ের অনুমানগুলিকে পরিবর্তন করে এবং অদূর ভবিষ্যতে আমি সম্ভবত আমার অস্ত্রাগারে কিছু কোড জেনারেশন সরঞ্জাম যুক্ত করব।