সম্প্রতি আমি আমার নিজস্ব এপিআই বিকাশ করছি এবং এপিআই নকশায় বিনিয়োগের আগ্রহের সাথে আমি কীভাবে আমার এপিআই ডিজাইনটি উন্নত করতে পারি তা আগ্রহী।
একটি দিক যা কয়েকবার প্রকাশিত হয়েছে তা হ'ল (আমার এপিআই এর ব্যবহারকারীরা নয় তবে বিষয়টি নিয়ে আমার পর্যবেক্ষণ আলোচনায়): এপিআই কী করছে তা কল করে কোড দেখে কেবল একজনের জানা উচিত ।
উদাহরণস্বরূপ রেপো জন্য গিটহাবের উপর এই আলোচনাটি দেখুন , এটি কিছুটা এমন যায়:
foo.update_pinned(true, true);
কেবল কোডটি দেখে (প্যারামিটারের নাম, ডকুমেন্টেশন ইত্যাদি না জেনে) কেউ অনুমান করতে পারে না এটি কী করবে - ২ য় যুক্তির অর্থ কী? প্রস্তাবিত উন্নতিতে এরকম কিছু পাওয়া যায়:
foo.pin()
foo.unpin()
foo.pin_globally()
এবং এটি বিষয়গুলি পরিষ্কার করে দেয় (২ য় তর্কটি বিশ্বব্যাপী ফু পিন করা উচিত কিনা, আমি অনুমান করছি) এবং আমি এক্ষেত্রে সম্মতি জানাতে পরে অবশ্যই উন্নতি হবে।
তবে আমি বিশ্বাস করি যে এমন কিছু উদাহরণ থাকতে পারে যেখানে পৃথকভাবে কিন্তু যুক্তিযুক্তভাবে সম্পর্কিত রাষ্ট্র স্থাপনের পদ্ধতিগুলি পৃথকগুলির পরিবর্তে একটি পদ্ধতি কল হিসাবে আরও ভালভাবে প্রকাশিত হবে, যদিও আপনি কেবল কোডটি দেখেই জানেন না যে এটি কী করছে । (সুতরাং আপনাকে খুঁজে পেতে প্যারামিটারের নামগুলি এবং ডকুমেন্টেশনগুলি অবলম্বন করতে হবে - যা আমি কোনও এপিআই সম্পর্কে অপরিচিত হলে ব্যক্তিগতভাবে আমি সর্বদা যা কিছু করি না)।
উদাহরণস্বরূপ আমি ফ্যালকনপিয়ারেSetVisibility(bool, string, bool) একটি পদ্ধতি প্রকাশ করি এবং আমি স্বীকার করি যে কেবল লাইনটি দেখছে:
falconPeer.SetVisibility(true, "aerw3", true);
এটি কী করছে তা আপনার কোনও ধারণা নেই। এটি 3 টি পৃথক মান সেট করে falconPeerযা যৌক্তিক অর্থে "দৃশ্যমানতা" নিয়ন্ত্রণ করে : যোগদানের অনুরোধগুলি কেবল পাসওয়ার্ড সহ গ্রহণ করুন এবং আবিষ্কারের অনুরোধের জবাব দিন। এটিকে 3 পদ্ধতি কলগুলিতে বিভক্ত করা এআইপিআই-র একজন ব্যবহারকারীকে "দৃশ্যমানতা" এর একটি দিক নির্ধারণ করতে পারে যা অন্যদের সেট করতে ভুলে যায় যা আমি তাদের "দৃষ্টিগোচর" এর সমস্ত দিক সেট করার জন্য কেবল একটি পদ্ধতি প্রকাশ করেই তাকে ভাবতে বাধ্য করি । তদ্ব্যতীত যখন ব্যবহারকারী কোনও দিক পরিবর্তন করতে চান তারা প্রায়শই সর্বদা অন্য দিকটি পরিবর্তন করতে চান এবং এখন একটি কলে তা করতে পারেন।
setSize(10, 20)হিসাবে setSize(width=10, height=20)বা হিসাবে পাঠযোগ্য নয় random(distribution='gaussian', mean=0.5, deviation=1)। প্রয়োগ করা নামযুক্ত পরামিতিগুলির ভাষাগুলিতে বুলিয়ানগুলি enums / নামক ধ্রুবক ব্যবহারের মতো ঠিক একই পরিমাণের তথ্য জানাতে পারে, যাতে তারা API এ ভাল হতে পারে।
updateপদ্ধতি:foo.update(pinned=true, globally=true)। বা:foo.update_pinned(true, globally=true)। সুতরাং, আপনার প্রশ্নের উত্তরটিও ভাষা বৈশিষ্ট্যগুলিকে বিবেচনায় নেওয়া উচিত, কারণ এক্স এক্স ভাষার জন্য একটি ভাল এপিআই ভাষা ওয়াই এবং বিপরীত ভাষার পক্ষে ভাল নাও হতে পারে।