কোনও প্রোগ্রামে হার্ড-কোডিং ডেটা মানগুলির সুবিধা আছে কি?


13

আমি একটি স্ব-শিক্ষিত, আভিজাত্য-hশ কোডার, তাই আমি যদি প্রোগ্রামার লিংগো পেরেক না করি তবে আমি ক্ষমা চাই।

আমি এমন একটি প্রকল্পে কাজ করছি যেখানে আমি ডেটা সরবরাহ করছি, যা নিয়মিত আপডেট করা হবে, এমন বিকাশকারীদের যারা ডেটা সম্পর্কিত প্রশ্নগুলি থেকে প্রতিবেদন তৈরির জন্য প্রয়োজনীয় একটি সরঞ্জাম তৈরি করবেন।

দেখে মনে হচ্ছে যে জড়িত সবাই মনে করে যে তাদের প্রতিবেদন উত্পন্নকরণের প্রোগ্রামে হার্ড-কোড ডেটা মানগুলি (স্কিমা নয়, তবে ডোমেনগুলি / মানগুলি নিজেরাই) করা দরকার।

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

যেহেতু সম্ভাব্য মানগুলির তালিকা সময়ের সাথে সাথে পরিবর্তিত হবে (যেমন বিভাগগুলি তৈরি করা হবে / নতুন নামকরণ করা হবে, নতুন কাজের শিরোনাম যুক্ত করা হবে), কোডটি ক্রমাগত আপডেট করা প্রয়োজন need আমার কাছে মনে হচ্ছে আমরা কোড রক্ষণাবেক্ষণের পদক্ষেপগুলি এড়িয়ে যেতে এবং প্রতিবেদনগুলি গতিশীলভাবে সংগঠিত করতে পারি।

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



প্রতিবেদনের ক্রস-ট্যাবগুলি কি সারি মানের মানগুলি কলাম হিসাবে উপস্থিত হওয়া উচিত?
তুলিনাস কর্ডোভা

1
@ ব্রেন্ডান - প্রতিবেদনে যদি আপনার হার্ড কোড মান থাকে তবে আপনাকে টিডব্লিউও (তালিকার উত্স এবং প্রতিবেদন) তালিকা পরিবর্তন করতে হবে, যদি প্রতিবেদনটি গতিশীল হয় তবে আপনাকে কেবল এটি একটি জায়গায় পরিবর্তন করতে হবে (রিপোর্ট) ।
kwah

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

1
@ ব্রেন্ডনও আমি আপনার সংজ্ঞাটি এক জায়গায় থাকার সাথে একমত নই - আপনি যেভাবে এটি বর্ণনা করেছেন এটি উত্স কোড জুড়ে ছড়িয়ে ছিটিয়ে রয়েছে multiple
kwah

উত্তর:


9

উইকিপিডিয়া:

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

হার্ড-কোডিং একটি অ্যান্টিপ্যাটার্ন হিসাবে বিবেচিত হয়।

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

কখনও কখনও আপনি এড়াতে পারবেন না তবে এটি অস্থায়ী হওয়া উচিত।

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

  • বার্তাগুলির হার্ডকোডিং একটি প্রোগ্রামকে আন্তর্জাতিকীকরণ করা শক্ত করে তোলে।
  • হার্ডকোডিং পাথগুলি অন্য কোনও স্থানে মানিয়ে নেওয়া শক্ত করে তোলে।

হার্ডকোডিংয়ের একমাত্র সুবিধাটি দ্রুত কোড সরবরাহ করা বলে মনে হচ্ছে।


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

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

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

24

সত্যি? কোনও কার্যকর বৈধ ব্যবহারের মামলা নেই?

আমি স্বীকার করি যে হার্ড-কোডিং সাধারণত একটি অ্যান্টি-প্যাটার্ন বা কমপক্ষে খুব খারাপ কোডের গন্ধ হয় , তবে এর প্রচুর ক্ষেত্রে এর অর্থ পাওয়া যায়:

  • সরলতা ( YAGNI ),
  • ইনপুটটি আসলে ধ্রুবক এবং কখনই পরিবর্তিত হবে না (যেমন এটি প্রাকৃতিক বা ব্যবসায়িক ধ্রুবক বা একটির সমানভাবে প্রতিনিধিত্ব করে eg যেমন 0, পিআই, ...),
  • এম্বেড করা সফ্টওয়্যার (মেমরি এবং বরাদ্দ সীমাবদ্ধতা মাথায় আসে),
  • সুরক্ষিত সফ্টওয়্যার (এই মানগুলি উপলভ্য নয় এবং / অথবা ডিকোড করা সহজ বা বিপরীত প্রকৌশলী নয়, যেমন ক্রিপ্টোগ্রাফিক টোকেন এবং সল্ট),
  • উত্পন্ন কোড (আপনার প্রিপ্রোসেসর বা জেনারেটর কনফিগারযোগ্য, তবে হার্ড-কোডড মান সহ কোডটি ছিটকে দেয়),
  • এবং সম্ভবত আরও কিছু।

এখনও একটি বিরোধী প্যাটার্ন ? তাই ওভার ইঞ্জিনিয়ারিং ! এটি আপনার সফ্টওয়্যারটির জীবন প্রত্যাশা সম্পর্কে!

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

এবং সরলতা / YAGNI সম্পর্কিত প্রথমটির তত্ত্বাবধান করবেন না এটি একেবারেই তুচ্ছ মনে করে: খুব সম্ভবত একটি সরু স্ক্রিপ্টের জন্য একটি ক্রেজি পার্সার এবং মান চেকার কার্যকর করার কোনও কারণ নেই যা খুব সংকীর্ণ ব্যবহারের ক্ষেত্রে এক কাজ করে।

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

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


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

@ টম: আপনি বলছেন যে একটি হার্ড-কোডেড মান ব্যবহারের চেয়ে একটি কনফিগারেশন লুকিং লাইব্রেরি প্রয়োগ করা (বা এমনকি পুনরায় ব্যবহার) কার্যকর করা সহজ এবং দ্রুত ছিল? তোমার জন্য ভাল. এছাড়াও, আমি দেখতে পাচ্ছি না যে আপনার শেষ বাক্যটি কীভাবে ওভার ইঞ্জিনিয়ারিংয়ের সংজ্ঞা অনুসারে ফিট করে। এটি স্পষ্টতই অগোছালো মনে হবে এবং স্পষ্টতই যদি এটি হার্ড-কোডেড এবং ডুপ্লিকেট করা হয় তবে এটি আরও খারাপ ( প্রতিবার, তবে প্রোগ্রামের একক পয়েন্টে)।
হাইলেম

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

1
@ টম, নিজেকে খুব ছোট বিক্রি করবেন না। আপনি অবশ্যই কিছু করতে পারেন। হার্ড কোডিংয়ের বিপরীতে বিভাগ এবং জব শিরোনাম ক্ষেত্রগুলি দেখে ডেটা সংগঠিত করতে দ্রুত অ্যালগরিদম লিখতে সহজ এবং কম সময় সাশ্রয়ী মনে হচ্ছে Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']। নতুন বিভাগ বা শিরোনাম প্রবর্তিত হলে ইভেন্টে হার্ড কোডড অ্যারে বজায় রাখা আরও অনেক কঠিন হবে।
ক্রিস জি

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

4

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

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


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

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

-1

একটি শক্তিশালী সমাধান কার্যকর করা যা এমন মানগুলির জন্য অনুমোদন দেয় যা অন্যথায় হার্ড-কোডড হয়ে থাকতে পারে পরিবর্তে ব্যবহারকারীরা সেই মানগুলির শক্তিশালী বৈধতা দাবি করে config তারা কি খালি স্ট্রিং লাগিয়েছিল? তারা কি এমন একটি সংখ্যা রেখেছিল যেখানে এটির সংখ্যা হওয়া উচিত ছিল? তারা কি এসকিউএল ইঞ্জেকশন করছে? প্রভৃতি

হার্ড-কোডিং এই ঝুঁকিগুলির অনেকগুলি এড়িয়ে চলে।

যা হার্ড-কোডিং সর্বদা, বা এমনকি প্রায়শই, একটি ভাল ধারণা বলে না। এটি আমলে নেওয়ার কারণগুলির মধ্যে একটি মাত্র।

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