কমপক্ষে অবাক হওয়ার নীতি কী?


32

প্রোগ্রামিংয়ে প্রিন্সিপাল অফ লেস্ট এ্যাস্টনিশমেন্ট নামে পরিচিত? এই ধারণাটি কীভাবে ভাল এপিআই ডিজাইন সম্পর্কিত? এটি কি কেবলমাত্র অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য প্রযোজ্য বা এটি অন্যান্য প্রোগ্রামিং কৌশলগুলিতেও ঘেঁটে যায়? "আপনার পদ্ধতিতে একটি জিনিস করা এবং এটি ভালভাবে করা" এই নীতির সাথে কি সম্পর্কিত?


23

উত্তর:


46

ন্যূনতম বিস্ময়ের মূলনীতিটি বিস্তৃত নকশাকান্ডের ক্রিয়াকলাপগুলির জন্য প্রযোজ্য - এবং কেবল কম্পিউটিংয়ে নয় (যদিও এটি বেশিরভাগ বিস্ময়কর জিনিস ঘটে often

"কল" বলার পাশের বোতামের সাথে একটি লিফট বিবেচনা করুন। আপনি বোতামটি টিপলে, পেফোনটি বেজে যায় (সেই তলায় লিফটটি কল করার চেয়ে)। এটি অবাক করা হিসাবে বিবেচিত হবে। সঠিক নকশাটি লিফটের পরিবর্তে ফোনের পাশে কল বোতামটি রাখা হবে।

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

এটি যখন কোনও এপিআই এ আসে ...

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

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

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

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

আরও পঠন (ইউআই দৃষ্টিভঙ্গি থেকে) - একটি আইবিএম বিকাশকারী ব্লগ যার নাম ক্রেঙ্কি ব্যবহারকারী: ন্যূনতম বিস্ময়ের মূলনীতি


3
ভাল উত্তর. পিওএলএ সহজভাবে বলা মানে একটি নকশা উভয়ই প্রত্যাশা তৈরি করে এবং সেই প্রত্যাশাগুলি পূরণ করে fulfill লোকেরা এটি যা প্রত্যাশা করে তা এটি করা উচিত।

আইবিএম বিকাশকারী ব্লগটি মনে হয় পুনর্গঠিত হয়েছে - লিঙ্কটি আর কাজ করছে না, বা পিডিএফ ডাউনলোড উপলব্ধ নেই। হতে পারে যে কেউ এর জন্য একটি আর্কাইভ.org লিঙ্কটি পেতে পারেন, বা অনুরূপ?
জাপ

4

সর্বনিম্ন বিস্ময়ের মূল বিষয় হ'ল আপনি যখন একজন এপিআই ডিজাইনার হিসাবে আপনার ব্যবহারকারীদের ওয়াট বলতে বাধা দেন ।

বিভিন্ন ভাষায় বিস্ময়ের কিছু উদাহরণ।

var array=new string[]; 
var list=array as IList<string>; //this works... 
list.Add("foo"); //exception saying it's not supported

foo.Equals(bar); //will call overriden Equals method
foo == bar; //equivalent to above in everyway, except for it won't call overrides... unless you're dealing with a string

var d=DateTime.Today;
d.Add(new TimeSpan(36,0,0,0)); //add 36 days to datetime d
Console.Writeline(d); //will print todays date. WAT

//in javascript
var f=function(){
  return 
    10; 
} //will either throw a syntax error or return void, depending on your javascript runner

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

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


2
এই ব্লগ পোস্টটি বিএস পূর্ণ, এবং এটি দেখানো হুবহু সহায়ক নয় (এমনকি এটি বিএস-তে পূর্ণ ছিল না)। আপনার এটিকে অপসারণ করা উচিত এবং পিএইচপি-র অসঙ্গতিগুলির নির্দিষ্ট উদাহরণগুলিতে নির্দেশ করা উচিত (তাদের মধ্যে অনেকগুলি রয়েছে, একটি দম্পতি চয়ন করা কঠিন হবে না)।
ইয়ানিস

"WAT" র সংজ্ঞা জন্য, এই CodeMash 2012 সম্মেলনে পড়ুন দয়া destroyallsoftware.com/talks/wat
ক্লেমেন্ট Herreman

আমি DateTimeজিনিস ছাড়া আপনার উদাহরণের সাথে একমত । আমি ধরে নিলাম এটি একটি অপরিবর্তনীয় বস্তু এবং Addএকটি নতুন উদাহরণ দেয়। এটি বেশ সাধারণ বিষয়।
musiKk

@ মুসিকেক - এটি কেবলমাত্র ভাষাগুলিতেই সাধারণ যেখানে ফাংশনগুলি কল করে পার্শ্ব-প্রতিক্রিয়াগুলি সংশোধন করা আশা করাও বেশি সাধারণ নয়। বিস্মিততা প্রসঙ্গে সংবেদনশীল।
জোরিস টিমারম্যানস

পছন্দ করেছেন আমি কেবল একটি ক্ষুদ্র হাসি দেওয়ার চেষ্টা করছিলাম :)
আর্লজ

0

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

আমার ধারণা ছিল "আপনি কি মজা করছেন? আপনি এখন আমাকে এটি বলছেন? স্বীকৃতি জানাতে চাকা থেকে আমার হাত নেওয়া দরকার?"।

ইন্টারফেসে বিস্ময়ের পৃষ্ঠতল (সাধারণত UI, তবে আমি মনে করি এটি একটি এমন একটি APIও হতে পারে যা অপ্রত্যাশিতভাবে আচরণ করে)। আমি বলব এটি ইন্টারফেসের নীচেও প্রবেশ করেছে, কারণ সত্যই ডিজাইন করা ইন্টারফেসটিকে সমর্থন করার জন্য এটি ভালভাবে ডিজাইন করা অন্তর্নিহিত সফ্টওয়্যার গ্রহণ করে।


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

4
যদিও এটি একটি সুন্দর গল্প এটি প্রশ্নের উত্তর নয়।
মার্সেল

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