প্রোটোবফ 3 মেসেজগুলিতে সমস্ত ক্ষেত্রকে alচ্ছিক কেন করেছে?


15

প্রোটোবুফের সিন্ট্যাক্স 3 সমস্ত ক্ষেত্রগুলি কীওয়ার্ডগুলি requiredএবং optionalপূর্ববর্তী প্রোটো 2 সিনট্যাক্স থেকে বাদ দিয়ে alচ্ছিক করে তুলেছিল। বিকাশকারীদের কাছ থেকে কিছু মন্তব্য পড়ে মনে হচ্ছে এটি এগিয়ে / পিছিয়ে বাইনারি সামঞ্জস্য বাড়ানোর জন্য করা হয়েছিল।

তবে আমার জন্য, এটি কেবল প্যাকেজের নামগুলির সংস্করণ দিয়ে প্রয়োগ করা যেতে পারে, বলুন com.example.messages.v1এবং তারপরে ক্লায়েন্টদের তারা বুঝতে পেরে ডিসরিওালাইজারগুলি প্রয়োগ করতে দিন। একই সাথে এটি কোনও ধরণের হিসাবে বর্ণিত কিছু চুক্তি সরিয়ে দেয় যা একটি সফ্টওয়্যার ইঞ্জিনিয়ারিং দৃষ্টিকোণ থেকে কার্যকর। উদাহরণস্বরূপ আমি যদি

message Location {
   double latitude = 1;
   double longitude = 2;
}

প্রোটো 3-তে একটি অর্ধ ব্যাকযুক্ত তৈরি করা সম্ভব Locationতবে প্রয়োজনীয় ক্ষেত্রগুলির একটি সরবরাহ না করে পুরোপুরি বৈধ ।

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


উত্তর:


13

প্রোটো 3 ক্রস-প্ল্যাটফর্মের পরিস্থিতিতে এটি আরও বেশি ব্যবহারযোগ্য করে তোলার লক্ষ্যে (যেমন আমি এটি বুঝতে পারি) বেশ কয়েকটি পরিবর্তন আনে । "অর্পিত" বনাম "স্পষ্টভাবে ট্র্যাকিং নির্ধারিত নয় তবে ডিফল্ট মানটি প্রতিবেদন করা" লক্ষ্য প্ল্যাটফর্মগুলির কয়েকটিতে প্রয়োগ করা খুব কঠিন এবং এটি ব্যবহারে বিভ্রান্তিকর হতে পারে। যেমন, প্রোটো 3 অনেক সহজ পদ্ধতির গ্রহণ করে:

  • অন্তর্নিহিত ডিফল্ট মান প্রাকৃতিক শূন্য মান (সংখ্যা / enums), মিথ্যা (Booleans) অথবা খালি স্ট্রিং আছে (স্ট্রিং)
  • শুধুমাত্র অন্তর্নিহিত ডিফল্ট অনুমোদিত; অন্য কোনও ডিফল্ট মান অনুমোদিত হয় না
  • যদি কোনও ক্ষেত্রের ডিফল্ট মান থাকে তবে এটি সিরিয়ালযুক্ত নয়; এটি শূন্য / মিথ্যা / খালি-স্ট্রিং বনাম কখনই বরাদ্দ করা হয়নি তা স্পষ্টভাবে নির্ধারিত হয়েছিল কিনা তা বিবেচ্য নয়
  • এ কারণে, "প্রয়োজনীয়" কোনও ধারণা নেই, যেহেতু "স্পষ্টভাবে একটি শূন্য মান নির্ধারিত" এবং "কখনই কোনও মান নির্ধারিত হয় না" অভিন্ন দেখায়

প্রোটো 3-তে প্রয়োজনীয় ক্ষেত্রগুলির একটি সরবরাহ না করে অর্ধ-ব্যাকযুক্ত কিন্তু পুরোপুরি বৈধ অবস্থান তৈরি করা সম্ভব।

অন্য মান: শূন্য। আপনি এটিকে শূন্যের সাথে স্পষ্টভাবে বরাদ্দ করেননি তা হ'ল মোট। এটি কাঙ্ক্ষিত কিনা তা আপনার উপর নির্ভর করে তবে এটি আমার কাছে বোধগম্য এবং এটি হল যে কীভাবে অনেকগুলি "নতুন অবজেক্ট / স্ট্রাক্টের প্রাথমিককরণ" বিস্তৃত প্ল্যাটফর্মগুলিতে কাজ করে।

সমস্ত প্রয়োজনীয় ক্ষেত্রের বৈধ মান আছে কিনা তা পরীক্ষা করে প্রতিটি ক্লায়েন্টের অতিরিক্ত বৈধতা কোডটি স্থানান্তর করা আরও খারাপ নয়?

যাচাই করার মতো কিছু নেই! বিন্যাসটি হ'ল ঠিক কী হবে যদি মান শূন্য স্পষ্টভাবে বরাদ্দ করা হয়। যদি এটি আইনী হয় তবে এটি আইনী। যদি এটি অবৈধ হয় (কারণ শূন্যটি আপনাকে বোঝায় না) তবে এটি অবৈধ; তবে এটি সুস্পষ্ট বা অন্তর্নিহিত কিনা তা অবৈধ হবে। জড়িত বৈধতার পরিমাণ পরিবর্তন হয় না।

ক্লায়েন্টদের মধ্যে ডেটা আদান-প্রদানের জন্য স্কিমা ভিত্তিক সিরিয়ালাইজেশন ফর্ম্যাট তৈরি করার সময় কি এটি একটি বড় ত্রুটি নয়?

সাধারণত নয়, না ... বিশেষত যেহেতু স্কিমা সংস্করণটি স্পষ্ট। আপনি যদি প্রোটো 2 ব্যবহার করতে চান: প্রোটো 2 ব্যবহার করুন। কিছুই স্বয়ংক্রিয়ভাবে পরিবর্তন হয় না।


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

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

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

@ কোডস চ্যাওস সম্মত হয়েছে এবং উল্লেখ করেছে - এবং হ্যাঁ, প্রোটোবুফ-নেট এই জাতীয় কোনও ঘোষণা পর্যবেক্ষণ ও সম্মান করবে
মার্ক গ্র্যাভেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.