হার্ড কোডিং মানগুলি এবং প্রতিরক্ষামূলক নকশা বনাম YAGNI সরিয়ে ফেলা হচ্ছে


10

প্রথমে কিছুটা ব্যাকগ্রাউন্ড। আমি বয়স -> রেট থেকে একটি কোড কোড করছি। এখানে 7 বয়সের বন্ধনী রয়েছে যাতে 7 সারি সহ লুকিং টেবিলটি 3 কলাম (| থেকে | রেট) হয়। মানগুলি খুব কমই পরিবর্তিত হয় - এগুলি আইন অনুসারে হার (প্রথম এবং তৃতীয় কলাম) যা 3 বছর ধরে একই থাকে। আমি অনুভব করেছি যে হার্ড-কোডিং ছাড়াই এই টেবিলটি সংরক্ষণের সবচেয়ে সহজ উপায়টি একটি সিএসভি সমন্বিত একক পাঠ্য মান হিসাবে বিশ্বব্যাপী কনফিগারেশন সারণিতে ডাটাবেসে রয়েছে (সুতরাং "65,69,0.05,70,74,0.06" কীভাবে হয় 65-69 এবং 70-74 স্তরগুলি সংরক্ষণ করা হবে)। তুলনামূলকভাবে পার্স করা সহজ তারপর ব্যবহার করুন।

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

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

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

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

সম্পাদনা সম্পাদনা প্রশ্নটি পরিষ্কার করতে, আমি প্রকৃত বাস্তবায়ন সম্পর্কে উদ্বিগ্ন নই। আমি উদ্বিগ্ন যে আমি হয় দ্রুত, খারাপ কাজ করতে পারি এবং YAGNI বলে এটি ন্যায়সঙ্গত করতে পারি, বা আমি আরও প্রতিরক্ষামূলক, উচ্চ-প্রচেষ্টা পদ্ধতি গ্রহণ করতে পারি, সর্বোপরি সর্বোত্তম ক্ষেত্রেও কম সুবিধা রয়েছে। একজন পেশাদার প্রোগ্রামার হিসাবে আমি জানি যে কোনও ডিজাইনের ত্রুটিযুক্ত তা প্রয়োগ করার সিদ্ধান্তটি কি কেবল ব্যয় / উপকার বিশ্লেষণে নেমে আসে?

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

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

আমি @ কর্বিনের উত্তরটিকে সঠিক হিসাবে চিহ্নিত করছি কারণ এটি আমার উন্নয়নের ব্যয়ের অনুমানগুলিকে পরিবর্তন করে এবং অদূর ভবিষ্যতে আমি সম্ভবত আমার অস্ত্রাগারে কিছু কোড জেনারেশন সরঞ্জাম যুক্ত করব।


ভুলে যাবেন না, যদি হারগুলি পরিবর্তিত হয় এবং আপনার কাছে সমস্ত হার্ড কোডড মান থাকে তবে হারগুলি পরিবর্তনের সময় আপনি historicalতিহাসিক রেকর্ড গণনাগুলিকে গণ্ডগোল করতে পারেন (এবং তারা আপনার ক্লায়েন্ট যা বলছে তা নির্বিশেষে)।
অ্যান্ডি

উত্তর:


6

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

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

ওহ, এবং অতিরিক্ত প্রক্রিয়াকরণের (সিএসভি) প্রয়োজন এমন ফর্ম্যাটে আপনার ডেটা সংরক্ষণ করবেন না। এটি কেবলমাত্র আপনার অতিরিক্ত মনোযোগ এবং পরীক্ষা প্রয়োজন এমন পদক্ষেপগুলি যুক্ত করে।


আমি বলব না যে একটি রেল মাইগ্রেশন মডেলগুলি থেকে টেবিল তৈরি করে ... রেল মাইগ্রেশন সারণিতে পরিবর্তনের বর্ণনা দেয়। একটি মাইগ্রেশন কার্যকর করা ডাটাবেস পরিবর্তন করে। টেবিলের কাঠামোর সাথে মেলে মডেল বৈশিষ্ট্যগুলি রান সময়ে তৈরি করা হয়।
কেভিন ক্লিন

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

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

10

@ থোরবজর্ন রাভন অ্যান্ডারসনের উত্তরটির কী-অফ এবং প্রসারিত করার জন্য: গণনা / অনুসন্ধান এক জায়গায় রাখা ভাল শুরু।

আপনার প্রতিরক্ষামূলক বনাম YAGNI সম্পর্কিত চিন্তাভাবনা একটি সাধারণ সমস্যা। এই ক্ষেত্রে, আমি এটিকে আরও দুটি জিনিস দ্বারা অবহিত করার পরামর্শ দেব।

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

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

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

শুভকামনা


1
আপনার দ্বিতীয় পয়েন্টের জন্য +1। ভবিষ্যতে আইনসভা সংস্থা কী করতে পারে তা অনুমান করার চেষ্টা করি না I
ডেভিড থর্নলি

এটি একটি লাইব্রেরি ফাংশনে করুন। শুধুমাত্র একজন ব্যবহারকারী থাকা ঠিক আছে। কখন এবং যদি প্রয়োজনীয়তাগুলি পরিবর্তন হয় আপনার পরিবর্তনের জন্য একটি জায়গা রয়েছে। (কোনও নির্দিষ্ট তারিখের মতো মূল্য অনুসন্ধানের জন্য আপনাকে কোনও ফাংশন যুক্ত করতে হতে পারে))
বিলথোর

সেরা এবং সবচেয়ে সম্পূর্ণ উত্তর, +1
অ্যান্ডি

7

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


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

যদিও আপনার উত্তরের জন্য ধন্যবাদ। অনুসন্ধানের বাস্তবায়ন এক জায়গায় রাখা অবশ্যই ভাল ডিজাইন।
রেবেকা স্কট

YAGNI কেবলমাত্র বৈধ যদি আপনি হারগুলি পরিবর্তিত হয় তবে আপনি নতুন বাইনারি শিপ করতে পারেন। যদি আপনি না করতে পারেন তবে আপনি কনফিগারেশনটি পরিবর্তন করতে পারেন, তারপরে এটি ডিফল্ট হিসাবে বর্তমান পাঠ্য উপস্থাপনার সাথে শুরুতে একটি কনফিগারেশন মান তৈরি করুন।

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

তারপর সমস্যা কি? যখন হারগুলি পরিবর্তন হয়, আপনি কোডটি আপডেট করেন এবং সমস্ত গ্রাহকের কাছে শিপ করবেন?

2

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

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

এই ক্ষেত্রে, প্রচেষ্টাটি খুব বেশি তাই আপনি এটি একটি পরিষ্কার উপায়ে করতে পারেন, এই পরিবর্তনের জামানত প্রভাবের সম্ভাবনা বড় এবং আপনি যে রিটার্ন পাবেন তা খুব কম (যেমন আপনি ব্যাখ্যা করেছেন, সম্ভবত মনে হয় এটি হবে না) পরিবর্তন).

আমি হার্ডকোড পদ্ধতির ব্যবহার করব (তবে এটি ভবিষ্যতে নমনীয় হওয়ার জন্য প্রস্তুত করুন) এবং, ভবিষ্যতে এই হারের পরিবর্তনের ক্ষেত্রে কোডের এই সমস্ত খারাপ ডিজাইনের বিভাগটি রিফ্যাক্টর করার সুযোগটি ব্যবহার করব use সুতরাং সময় এবং ব্যয়টি সঠিকভাবে অনুমান করা যায় এবং আপনার হার্ডকোডযুক্ত মান পরিবর্তন করার ব্যয়টি সর্বনিম্ন হবে।

এটি আমার পদ্ধতির হবে :)


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

@ বেন স্কট: আপনাকে স্বাগতম! হ্যাঁ, আমার দৃষ্টিতে নকশাগুলি নীতিগুলি সুন্দর দেখায় বলে তৈরি করা হয়নি / কারণ তারা কোড "পরিষ্কারতা", নমনীয়তা, দৃust়তা ইত্যাদির মতো সুবিধা নিয়ে আসে তবে সর্বদা ২ টি প্রশ্ন থাকে: 1- আমার কি এটি দরকার? ? 2- আমার বিধিনিষেধগুলি (সময়, প্রযুক্তিগত ইত্যাদি) আমাকে এটি প্রয়োগ করার অনুমতি দেয়? এটি সাধারণত আমার নকশার নীতিটি চয়ন করতে পরিচালিত করে। ওভার ইঞ্জিনিয়ারিংটিও খারাপ;) পিএস: আপনি যদি মনে করেন এটি একটি আকর্ষণীয় উত্তর, দয়া করে এটির ভোট দিন যাতে অন্য লোকেরাও এটি উচ্চতর সম্ভাবনা সহ পড়েন। ধন্যবাদ! :)
জেএসবাচ


2

এটি এমন একটি আইটেম যা না হওয়া পর্যন্ত "পরিবর্তন হবে না"। এটি অনিবার্য যে এটি পরিবর্তিত হবে, তবে সেই সময়টি কিছুটা দূরে হতে পারে।

আপনার ন্যায্যতা সঠিক। এই সময়ে, গ্রাহকরা সহজেই এই হারগুলি পরিবর্তন করার ক্ষমতা জিজ্ঞাসা করেননি। যেমনটি, ইয়াজিএনআই

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

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

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


ধন্যবাদ @ বারিন, আমি প্রশ্নে এসআরপি উল্লেখ করি নি তবে এটি পরিকল্পনা ছিল। ভাল পয়েন্ট পুনরায় ক্লায়েন্টকে সমস্যার মালিকানা দেয়।
রেবেকা স্কট

ভবিষ্যতে যখন জিনিসগুলি ভুল হয়ে যায় তার জন্য দোষ দেওয়া আমার পক্ষে পেশাদার মনে হয় না।
অ্যান্ডি

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

@ বেরিনলরিটস তবে এই বিশেষ নকশার সিদ্ধান্তটি নিম্নমানের অংশগুলি ব্যবহার করে বলেছে "আমি এই ফুটো পাইপটি প্লাগ করার জন্য প্লাস্টিক পুটি ব্যবহার করতে পারি, এটি আপনার সস্তার বিকল্প!" হারগুলি পরিবর্তন হবে। এটি প্রদত্ত, এবং কোনও পেশাদার এটির অনুমতি দেয় না এমন একটি সিস্টেম তৈরি করার জন্য এটি দায়িত্বজ্ঞানহীন। এবং প্রকল্পের ব্যয়ের মহাপরিকল্পনাতে সঞ্চয়গুলি সম্ভবত নগন্য। তথ্য একটি টেবিলের মধ্যে রাখুন; যে কোডটি লুপিংয়ের ডেটা পায় সেটি কিছুটা আলাদা, যুক্তিটি নির্ধারণ করে যে কোন হারটি ব্যবহার করতে হবে তা উভয় উপায়েই একই। কেবলমাত্র অন্য সিদ্ধান্তটি হ'ল কীভাবে historicalতিহাসিক ডেটা হ্যান্ডেল করা যায় ...
অ্যান্ডি

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

2

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

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

এটি ধরে নেয় আপনার সমস্ত কনফিগারেশন ফাইলগুলিতে রয়েছে; এটি যদি রেজিস্ট্রিটির মতো কোথাও কঠিন হয় তবে আপনার সম্ভবত এই পরামর্শটি উপেক্ষা করা উচিত :)


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

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

2

আমি অনুভব করেছি যে হার্ড-কোডিং ছাড়াই এই টেবিলটি সংরক্ষণের সবচেয়ে সহজ উপায়টি একটি সিএসভি সমন্বিত একক পাঠ্য মান হিসাবে বিশ্বব্যাপী কনফিগারেশন সারণিতে ডাটাবেসে রয়েছে (সুতরাং "65,69,0.05,70,74,0.06" কীভাবে হয় 65-69 এবং 70-74 স্তর সংরক্ষণ করা হবে।

সবেমাত্র একটি ডিবি টেবিল তৈরি করেছে। (আপনি যেখানে ফাইল করা একটিতে পুরো টেবিলটি সংরক্ষণ করার কথা ভাবছেন, আপনি কি ক্ষিপ্ত হয়েছেন?)

টেবিলের জন্য 2 ক্ষেত্রের দরকার নেই 3. বয়স এবং হার। এই পরবর্তী সারিতে উপরের মান রয়েছে! আপনি না জেনেও ডি-নরমালাইজ করছেন!

67 বছর বয়সের যে কোনও ব্যক্তির জন্য হার পাওয়ার জন্য এখানে স্ক্যাকল রয়েছে।

Select * from RateTable where Age in (Select max(age) from RateTable where age <=67) 

সুযোগ না থাকায় কোনও রক্ষণাবেক্ষণের স্ক্রিন তৈরি করার চিন্তা করবেন না। যদি তারা পরে এটি চাইবে, একটি পরিবর্তন অনুরোধ জারি করুন এবং এটি করুন।

সম্পাদনা: অন্যরা যেমন বলেছে যে কোডটি রেটটি কেন্দ্রীভূত করে রাখে, পুরো রেট কাঠামোটি পুরোপুরি কার্যকর হয় যদি।


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

পরবর্তী সারিটিতে ব্যাপ্তির উপরের মান থাকে ... এটি ডেটারের নকল। <69 এবং> 7 বলা একই জিনিস। উভয় মান থাকার একমাত্র কারণ হ'ল পরিসরের হোল থাকতে পারে। ... আমি একটি টেবিল ব্যবহার করতে বলছি কারণ এটি সহজ (এবং আরও ভাল নকশা)। আমি বুঝতে পারছি না যে আপনি কেন মনে করেন যে কোনও টেবিলে সিএসভি সংরক্ষণ করা আপনার যে কোনও সময় বা প্রচেষ্টা বাঁচাতে পারে, আপনার এখনও একটি স্ট্রিং পেতে একটি ডিবি কল প্রয়োজন, তারপরে আপনাকে এটি বিশ্লেষণ করতে হবে। আমি আপনাকে উপরে যেমনটি দেখিয়েছি আপনি একক ডিবি কল দিয়ে রেট পেতে পারেন।
মরনস

আহ সত্য। আমি টেবিলটি উত্স উপাদানের মতোই রাখছিলাম ... এবং আমি মিস করেছি যে বয়সটি আপনার উত্তরের উপরের সীমা, কারণ আমি আপনাকে যে দুঃখ দিয়েছিলাম তা আমার ছিল।
রেবেকা স্কট

1
"আপনি এটি না জেনেও মনোমালিন্য করছেন!" - প্রথমে আমি ভেবেছিলাম এটি একটি টাইপো এবং আপনি 'ডেনারমালাইজিং' বোঝাতে চেয়েছিলেন তবে আমি এটির বিষয়ে যত বেশি চিন্তা করেছি ততই মনে হচ্ছে আপনি যে কোনও উপায়েই থাকতে পারেন :)
EZ হার্ট

@ez হার্ট LOL সত্য।
রেবেকা স্কট

1

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

আমার কাছে একটি পরিচিত চৌকস / ওওপি লোক (যেমন ডেভ থমাস বা কেন্ট বেক বা অন্য কেউ) পড়ার একটি স্মৃতি রয়েছে যে কোড নকলের জন্য তাদের থাম্বের নিয়মটি দ্বিগুণ এবং মাত্র দুবার ছিল: আপনি প্রথমবারের মতো কোনও জিনিস নকল করলেন না বলে রিফ্যাক্টর করবেন না আপনি সম্ভবত এটি আপনার জীবনে দুবার লিখতে পারেন। তবে তৃতীয়বার ...

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


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

0

একটি ফাংশনে হার্ড কোড।

  • যখন মান পরিবর্তন হয়, আপনি আবার গ্রাহককে বিল দিতে পারেন
  • মানগুলি পরিবর্তিত হলে, সম্ভাবনাগুলি হ'ল টেবিল বিন্যাসটি পরিবর্তন করতে হবে, সিএসভি করা সময় নষ্ট করবে
  • কার্যকর করা সহজ, বর্তমান চুক্তি সহ বাজেটের উচ্চতর সম্ভাবনা
  • এটি আপডেট করার দরকার পড়লে সহজেই খুঁজে পেতে পারেন

আমাকে এই নিম্নমানের মানটি ইনস্টল করতে দিন যাতে এটি যখন এক বছরে অবশ্যই ভেঙে যায় আমি পুনরাবৃত্তি ব্যবসা পাই। এটি ছায়াময় শোনায়, কারণ এটি।
অ্যান্ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.