এপিআই অনুরোধ / প্রতিক্রিয়াতে খালি স্ট্রিং, নাল বা খালি সম্পত্তি মুছুন


25

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

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

কোড দৃষ্টিকোণ থেকে, স্ট্রিং ফাংশনগুলিকে কেবলমাত্র এক প্রকারের সাথে কাজ করতে সীমাবদ্ধ করা string( যেমন নাল নয়), তাদের প্রমাণ করা সহজ করে তোলে; নাল এড়িয়ে চলাও Optionবস্তু থাকার কারণ । সুতরাং, যদি অনুরোধ / প্রতিক্রিয়া তৈরি করে এমন কোডটি যদি নাল ব্যবহার না করে, তবে আমার অনুমিতি API এর অন্য দিকে কোডটিও নাল ব্যবহার করতে বাধ্য হবে না।

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

সুতরাং, এই উদ্বেগগুলির সমাধান করার জন্য এটি করার সর্বোত্তম উপায় কোনটি? এটি স্থানান্তরিত হওয়া অবজেক্টের ফর্ম্যাটের উপর নির্ভর করে (স্কিমা / স্কিমহীন)?


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

যদি আপনি উত্তরাধিকার ব্যবহার করেন if( value === null) { use parent value; } তবে এটি সহজেই বলা যায় তবে আপনি যদি সন্তানের মানটি এমনকি একটি খালি স্ট্রিংতেও সেট করেন (উদাহরণস্বরূপ ডিফল্ট প্যারেন্ট মানটি ফাঁকা দিয়ে ওভাররাইড করে) তবে আপনি কীভাবে মানটিকে "পুনরায় উত্তরাধিকারী" করবেন? আমার কাছে এটি নাল হিসাবে সেট করার অর্থ "এই মানটি আনসেট করুন যাতে আমরা পিতামাতার মানটি ব্যবহার করতে জানি।"
ফ্র্যাঙ্ক ফোর্ট 17

যেহেতু "খালি সম্পত্তি মুছুন" কেন "এ" এড়াতে nullহবে (এটি সত্য যে nullএটি এড়ানো হয়), প্রশ্নকর্তার অর্থ "নন-নাল রিটার্ন করুন" [অবজেক্ট] (যেমন: খালি স্ট্রিং, খালি অ্যারে ইত্যাদি) তারা যখন "এড়ানো" লিখুন।
cellepo

উত্তর:


18

TLDR; নাল বৈশিষ্ট্য সরান

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

আপনি যখন JSON কে কেবলমাত্র একটি সংক্রমণ ফর্ম্যাট হিসাবে দেখেন, সেট করা নেই এমন বৈশিষ্ট্যগুলি বাদ দেওয়ার পক্ষে এটি আরও অর্থবোধ করে। তারের ওপারে পাঠানো কম। যদি আপনার ব্যাক-এন্ডের ভাষাটি ডিফল্টরূপে নাল ব্যবহার না করে, আপনি সম্ভবত একটি ত্রুটি দেওয়ার জন্য আপনার ডিসরিয়ালাইজারটি কনফিগার করতে পারেন। উদাহরণস্বরূপ, নিউটোনসফ্টের জন্য আমার সাধারণ সেটআপ J জসন নাল / অনুপস্থিত বৈশিষ্ট্যগুলিকে optionকেবল এফ # প্রকারে / থেকে অনুবাদ করে এবং অন্যথায় ত্রুটি করবে will এটি কোন ক্ষেত্রগুলি alচ্ছিক ( optionটাইপযুক্ত) এর একটি প্রাকৃতিক উপস্থাপনা দেয় ।

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


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

@ ক্রিসক্রাইফাইস হ্যাঁ, আমি বিশ্বাস করি যে শেষ অনুচ্ছেদে এটি আবরণ করা হয়েছে। এমন কেস রয়েছে যেখানে বিভিন্ন কৌশল প্রয়োগ করা আরও ভাল।
ক্যাসি স্পিকম্যান

আমি সম্মত হই যে জেএসএন কেবল সংক্রমণ বিন্যাস হিসাবে ব্যবহৃত হয়, এটি কর্বার মতো তারের মধ্য দিয়ে বস্তুটি পাস করে না। আমি এও সম্মত হই যে বৈশিষ্ট্যগুলি যুক্ত এবং সরানো যেতে পারে; উপস্থাপনা পরিবর্তন করতে পারে, নিয়ন্ত্রণগুলি পরিবর্তন করতে পারে, বিশেষত ওয়েবে।
imel96

15

আপডেট করুন: আমি উত্তর, একটি সামান্য বিট সম্পাদনা করেছি, কারণ এটি বিভ্রান্তির সীসা থাকতে পারে।


একটি খালি স্ট্রিং দিয়ে যাওয়া একটি সংজ্ঞায়িত সংখ্যা। খালি স্ট্রিং এখনও একটি মান, এটি খালি। কোনও মান এমন কোনও কনস্ট্রাক্ট ব্যবহার করে নির্দেশ করা উচিত নয় যা কিছু উপস্থাপন করে না null,।

এপিআই বিকাশকারীর দৃষ্টিকোণ থেকে এখানে কেবল দুটি ধরণের বৈশিষ্ট্য রয়েছে:

  • প্রয়োজনীয় (এগুলির অবশ্যই তাদের নির্দিষ্ট ধরণের একটি মান থাকতে হবে এবং এটি কখনও খালি হবে না),
  • .চ্ছিক (এই মায়ায় তাদের নির্দিষ্ট ধরণের মান থাকতে পারে তবে মায়াও ধারণ করে null

এটি একেবারে স্পষ্ট করে তোলে যে যখন কোনও সম্পত্তি বাধ্যতামূলক হয়, অর্থাৎ। প্রয়োজনীয়, এটি কখনও হতে পারে না null

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

গতিযুক্তরূপে ক্লায়েন্টদের অতিরিক্ত শর্তাদি সহ প্রতিক্রিয়া বাহিনী থেকে ক্ষেত্রগুলি অন্তর্ভুক্ত করা / অপসারণ।


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


হ্যাঁ, খালি স্ট্রিং একটি মান এবং আমি nullউল্লেখগুলির জন্য ব্যবহার করি । রেফারেন্সের সাথে মানগুলি মিশিয়ে দেওয়া আমার উদ্বেগের একটি। nullএকটি মানহীন stringচ্ছিক স্ট্রিং ক্ষেত্রগুলির সাথে আপনি কীভাবে optionচ্ছিক ক্ষেত্রগুলিকে আলাদা করতে পারেন null? পার্সিং পুনরায়, সম্পত্তি অস্তিত্ব পরীক্ষা করা পার্সার আরও ভঙ্গুর করে তোলে না?
imel96

2
@ imel96 অ-alচ্ছিক ক্ষেত্রগুলি কখনই শূন্য হতে পারে না। যদি কিছু অ-alচ্ছিক হয় তবে সর্বদা একটি মান (তার নির্দিষ্ট ধরণের) থাকা উচিত।
অ্যান্ডি

3
এই. এপিআইগুলির ঘন ঘন ভোক্তা হিসাবে, আমি ঘৃণা করি যখন আমাকে "ডায়নামিক" কাঠামোগুলি আমার কাছে ফিরে আসবে, এমনকি যদি এটি একটি alচ্ছিক ক্ষেত্র বাদ দেওয়া হয় তখনও। (এটিও অনেকটা একমত যে জেডএলএস এবং নাল মধ্যে একটি বড় পার্থক্য রয়েছে)। আমি আনন্দের সাথে সারা দিন নাল মান গ্রহণ করব। একজন এপিআই লেখক হিসাবে, আমার লক্ষ্যগুলির মধ্যে একটি হ'ল ক্লায়েন্টের খরচ যতটা সম্ভব বেদনাদায়ক করা এবং এর অর্থ সর্বদা প্রত্যাশিত ডেটা কাঠামো থাকা having
jleach

@ ডেভিডপ্যাকার তাই, যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি মানটি indicateচ্ছিক nullনির্দেশিত করতে ব্যবহার করেন। সুতরাং, যখন আপনি কোনও অবজেক্টকে সংজ্ঞায়িত করেন যার একটি অ-alচ্ছিক স্ট্রিং সম্পত্তি রয়েছে এবং গ্রাহকের এই সম্পত্তিটি নেই, তখন তাকে সেই সম্পত্তিটির জন্য খালি স্ট্রিং প্রেরণ করতে হবে। এটা কি সঠিক?
imel96

2
@ গ্রেগরিনিসবেট এটি করবেন না, দয়া করে। ওটা কোন অর্থ প্রকাশ করে না.
অ্যান্ডি

3

null ব্যবহার হ'ল অ্যাপ্লিকেশন / ভাষা নির্ভর

অবশেষে nullএকটি বৈধ অ্যাপ্লিকেশন মান হিসাবে ব্যবহার না করা বাছাই আপনার আবেদন এবং প্রোগ্রামিং ভাষা / ইন্টারফেস / প্রান্ত দ্বারা মূলত নির্ধারিত হয়।

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

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

  1. আমি কি ভবিষ্যতের ধরণের মানগুলি যুক্ত করার পরিকল্পনা করছি? যদি তা হয় তবে Optionআপনার ইন্টারফেস ডিজাইনের জন্য সম্ভবত এটি আরও ভাল।
  2. কখন আমার গ্রাহকদের কলকে বৈধতা দেওয়া দরকার? স্ট্যাটিক্যালি? পরিবর্তনশীল? আগে? পরে? আদৌ? আপনার প্রোগ্রামিং ভাষা যদি এটি সমর্থন করে তবে স্ট্যাটিক টাইপিংয়ের সুবিধাগুলি ব্যবহার করুন কারণ এটি আপনাকে বৈধতার জন্য যে কোড তৈরি করতে হবে তা এড়িয়ে চলে। Optionআপনার স্ট্রিং অ-অযোগ্য হলে সম্ভবত এই কেসটি সবচেয়ে ভাল পূরণ করে। তবে, আপনার সম্ভবত কোনও nullস্ট্রিং মানের জন্য ব্যবহারকারীর ইনপুটটি পরীক্ষা করতে হবে , সুতরাং আমি সম্ভবত প্রথম প্রশ্নটির প্রশ্নটির পিছনে পিছিয়ে পড়েছি: আমি কত ধরণের মান / উপস্থাপন করতে চাই।
  3. কি nullআমার প্রোগ্রামিং ভাষায় একটি প্রোগ্রামার ত্রুটির পরিচায়ক? দুর্ভাগ্যক্রমে, nullপ্রায়শই কিছু ভাষাতে ইনিটায়ালাইজড (বা স্পষ্টরূপে নয়) সূচক বা রেফারেন্সের জন্য ডিফল্ট মান। কি nullডিফল্ট মান হিসাবে গ্রহণযোগ্য একটি মান হিসেবে? এটি একটি ডিফল্ট মান হিসাবে নিরাপদ ? কখনও কখনও nullবিচ্ছিন্ন মানগুলির ইঙ্গিত দেয়। আমি কি আমার ইন্টারফেসের গ্রাহকদের তাদের প্রোগ্রামে এই সম্ভাব্য মেমরি পরিচালনা বা প্রারম্ভিক সমস্যার একটি ইঙ্গিত দিয়েছি? এই জাতীয় সমস্যার মুখে এই জাতীয় কলটির ব্যর্থতা মোড কী? কলারটি কি আমার মতো একই প্রক্রিয়াতে বা থ্রেডে রয়েছে যাতে এই ধরনের ত্রুটিগুলি আমার আবেদনের জন্য উচ্চ ঝুঁকিপূর্ণ?

এই প্রশ্নের আপনার উত্তরগুলির উপর নির্ভর করে, আপনি সম্ভবত nullআপনার ইন্টারফেসের জন্য সঠিক কিনা তা সুনিশ্চিত করতে সক্ষম হবেন ।

উদাহরণ 1

  1. আপনার আবেদনটি সুরক্ষা গুরুতর critical
  2. আপনি স্টার্টআপে কিছু ধরণের হিপ ইনিশিয়ালাইজেশন ব্যবহার করছেন এবং nullস্ট্রিংয়ের জন্য স্থান বরাদ্দ করতে ব্যর্থ হওয়ার পরে একটি সম্ভাব্য স্ট্রিংয়ের মান।
  3. এ জাতীয় সম্ভাবনা রয়েছে এরকম একটি স্ট্রিং আপনার ইন্টারফেসটিকে হিট করে

উত্তর: nullসম্ভবত উপযুক্ত নয়

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

উদাহরণ 2

  1. আপনি একটি সি স্ট্রাক্ট ব্যবহার করছেন যার একটি char *সদস্য রয়েছে।
  2. আপনার সিস্টেম হিপ বরাদ্দ ব্যবহার করে না এবং আপনি মিস্রা পরীক্ষা করছেন।
  3. আপনার ইন্টারফেসটি এই স্ট্রাকটিকে পয়েন্টার হিসাবে গ্রহণ করে এবং নিশ্চিত করে তোলে যে স্ট্রাকটি নির্দেশ করে না NULL
  4. char *আপনার API এর জন্য সদস্যের ডিফল্ট এবং নিরাপদ মান এর একক মান দ্বারা চিহ্নিত করা যেতে পারেNULL
  5. আপনার ব্যবহারকারীর কাঠামো সূচনা করার পরে, আপনি ব্যবহারকারীকে স্পষ্টভাবে char *সদস্যকে আরম্ভ না করার সম্ভাবনা সরবরাহ করতে চান ।

উত্তর: NULLউপযুক্ত হতে পারে

যুক্তি: আপনার স্ট্রাকটি NULLচেকটি পাস করে তবে অবিবেচনাযুক্ত হওয়ার খুব কম সুযোগ রয়েছে । তবে আপনার স্ট্রাক্টের মান এবং / অথবা স্ট্রাক্টের ঠিকানাটির পরিসীমা পরীক্ষা করতে না পারলে আপনার এপিআই এটির জন্য অ্যাকাউন্ট করতে পারবেন না। MISRA-C ল্যাটারগুলি আপনার API এর ব্যবহারকারীদের তাদের আরম্ভের আগে স্ট্রাক্ট ব্যবহারের পতাকাঙ্কিত করে সহায়তা করতে পারে। যাইহোক, char *সদস্য হিসাবে , যদি সূচনা কাঠামোর দিকে নির্দেশকের বিন্দু NULLহয় তবে স্ট্রাক ইনিশিয়ালাইজারে কোনও অনির্ধারিত সদস্যের ডিফল্ট মান। অতএব, আপনার আবেদনের স্ট্রাক সদস্যের NULLজন্য নিরাপদ, ডিফল্ট মান হিসাবে পরিবেশন করতে পারে char *

যদি এটি সিরিয়ালাইজেশন ইন্টারফেসে থাকে তবে আমি স্ট্রিংয়ের নাল ব্যবহার করব কি না সে সম্পর্কে আমি নিম্নলিখিত প্রশ্নগুলি জিজ্ঞাসা করব।

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

সাধারণ উপদেশ

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

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

1

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

খালি স্ট্রিং হিসাবে null

এটি আমার জন্য কোনও উপায় নয়। অ-সংজ্ঞায়িত এর সাথে খালি স্ট্রিংয়ের শব্দার্থের মিশ্রণ করবেন না। অনেক ক্ষেত্রে এগুলি পুরোপুরি বিনিময়যোগ্য হতে পারে তবে আপনি এমন ক্ষেত্রে দৌড়াতে পারেন যেখানে অ-সংজ্ঞায়িত এবং সংজ্ঞায়িত-তবে-খালি বলতে কিছু আলাদা বোঝায়।

এক ধরণের বোকা উদাহরণ: ধরা যাক যে একটি বৈশিষ্ট্য রয়েছে যা একটি বিদেশী কী সংরক্ষণ করে, এবং সেই বৈশিষ্ট্যটি সংজ্ঞায়িত হয় না বা হয় null, এর অর্থ হ'ল কোনও সম্পর্ক সংজ্ঞায়িত হয় না, যেখানে একটি খালি স্ট্রিং ""একটি সংজ্ঞায়িত সম্পর্ক হিসাবে বোঝা যায় এবং বিদেশী রেকর্ডের আইডি হ'ল খালি স্ট্রিং।

বনাম সংজ্ঞায়িত করা হয়নি null

এটি কোনও কালো বা সাদা বিষয় নয়। উভয় পদ্ধতির পক্ষে মতামত রয়েছে।

nullমানগুলি স্পষ্টরূপে সংজ্ঞায়িত করার পক্ষে , এখানে এই পেশাদার রয়েছে:

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

একটি বিদ্যমান নেই বলে ধরে নেওয়ার পক্ষে এর শব্দার্থগুলির সমান null:

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

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

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


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

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

নাল পার্টনার রেফারেন্সের সাথে আমি ঠিক আছি মানে অংশীদার নেই এবং রেফারেন্সও কোনও স্ট্রিং নয়। অংশীদারিটির নাম একটি স্ট্রিং, এমনকি যদি আপনি অংশীদার নাম হিসাবে নালকে অনুমতি দেন, আপনি কি সেই নালটিকে ধরে ফেলবেন না এবং কোনও মুহুর্তে খালি স্ট্রিং দিয়ে এটিকে প্রতিস্থাপন করবেন না?
imel96

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

আমি বলতে চাইনি যে কোনও অংশীদার নয়, অংশীদারটি কোনও বস্তু হবে। এটি যে অংশীদার nameসম্পর্কে আমি কথা বলছিলাম, আপনি কি তার অংশীদারটির নাম বাতিল করতে দেবেন?
imel96

1

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

আপনি বিচার করুন এর মধ্যে কোনটি ঘটতে পারে। আপনার অ্যাপ্লিকেশনটির খালি স্ট্রিং থাকা কী বোঝায়? আপনি কি নালাকে ব্যবহার করে স্পষ্টভাবে "কোনও ডেটা" বলার মধ্যে কোনও পার্থক্য রাখতে চান এবং স্পষ্টভাবে কোনও মূল্য না রেখে? আপনার উভয়ই সম্ভাবনা থাকতে হবে (নাল এবং কোনও মূল উপস্থিত নেই) যদি উভয়ই ক্লায়েন্টের দ্বারা পৃথক হওয়া প্রয়োজন।

এখন মনে রাখবেন যে এটি সমস্ত তথ্য সংক্রমণ সম্পর্কে। রিসিভারটি ডেটা দিয়ে যা করে তা হ'ল তাদের ব্যবসা এবং তারা যা তাদের পক্ষে সবচেয়ে সুবিধাজনক তা করবে। রিসিভার উচিত বিপর্যয় ছাড়া (সম্ভবত ডেটা প্রত্যাখ্যান করে) কিছু আপনি এটি নিক্ষেপ হ্যান্ডেল করতে সক্ষম হবেন।

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


আমি "আপনার যদি ক্লায়েন্টের দ্বারা আলাদা করা দরকার" তে আপনার বক্তব্যটি পছন্দ করি।
imel96

0

যদিও আমি সবচেয়ে ভাল এটি বলতে পারি না এটি প্রায় অবশ্যই একটি সাধারণ বাস্তবায়ন বিশদ নয় , আপনি কীভাবে সেই পরিবর্তনশীলটির সাথে ইন্টারেক্ট করতে পারবেন তার কাঠামোর পরিবর্তন করে।

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

আপনি যদি সবসময় একইভাবে স্ট্রিংয়ের সাথে ইন্টারঅ্যাক্ট করেন তবে কার্যকরীতার জন্য আপনার মাথায় থাকা সম্ভবত সহজ হবে ।

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

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


"বিভক্ত ওয়ার্কফ্লো" থাকা খারাপ। প্রযোজকের পক্ষের সমস্ত কিছু পরিষ্কার বলা যাক, স্ট্রিং ধরণের পদ্ধতিগুলি কেবলমাত্র ফিরে আসে string, কখনই শূন্য হয় না। যদি এপিআই নাল ব্যবহার করে, তবে কোনও এক সময় প্রযোজককে nullএপিআইয়ের সাথে সঙ্গতিপূর্ণ হওয়ার জন্য এটি তৈরি করতে হবে। তারপরে গ্রাহককেও পরিচালনা nullকরতে হবে। তবে আমি মনে করি আপনি যা বলছেন আমি পেয়েছি, কেবল ঠিক করুন এবং অধিকারকে এপিআই সংজ্ঞা দিন, তাই না? তার মানে কি এই যে তাদের কারওর সাথে কোনও ভুল নেই?
imel96

হ্যাঁ, আপনি আপনার এপিআই-তে যা কিছু করুন তা ব্যবহারকারীর কীভাবে তাদের কোডটি গঠন করতে হবে তা প্রভাবিত করবে, তাই আপনার API এর ব্যবহারকারীর বিবেচনায় আপনার নকশাটি বিবেচনা করে আপনি কোন দিকটি সবচেয়ে ভাল তা নির্ধারণ করতে সক্ষম হবেন। শেষ পর্যন্ত এটি আপনার এপিআই। শুধু ধারাবাহিক হতে হবে। কেবলমাত্র আপনি পদ্ধতির পক্ষে মতামত সিদ্ধান্ত নিতে পারেন।
এরদরিক আয়রনরোজ

0

ডকুমেন্ট!

টি এল; ডিআর>

আপনি যেমন উপযুক্ত দেখেন তেমন করুন - কখনও কখনও এটি যে প্রসঙ্গে এটি ব্যবহৃত হয় তা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, একটি ওরাকল এসকিউএল-এ ভেরিয়েবলগুলি বাঁধুন: খালি স্ট্রিংকে NUL হিসাবে ব্যাখ্যা করা হয়।

সহজভাবে আমি বলব - নিশ্চিত হয়েছি যে প্রতিটি দৃশ্যের উল্লিখিত নথি আপনি নথিভুক্ত করেছেন

  • শূন্য
  • খালি (খালি)
  • অনুপস্থিত (সরানো)

আপনার কোড এটিতে বিভিন্ন উপায়ে কাজ করতে পারে - আপনার কোড এটিতে কীভাবে প্রতিক্রিয়া দেখায় তা নথিভুক্ত করুন:

  • ব্যর্থ (ব্যতিক্রম ইত্যাদি), এমনকি বৈধতা ব্যর্থ করে (সম্ভবত একটি চেক করা ব্যতিক্রম) বনাম পরিস্থিতি সঠিকভাবে পরিচালনা করতে পারে না (নালপয়েন্টারএক্সেপশন)।
  • যুক্তিসঙ্গত খেলাপি প্রদান করুন
  • কোড আলাদা আচরণ করে

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

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

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

0

tl; dr - আপনি যদি এটি ব্যবহার করেন: এর অর্থের সাথে সামঞ্জস্য থাকুন।

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

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

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

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