এনামে একটি বিশেষ মান "সমস্ত" রাখা কি ভাল অনুশীলন?


11

আমি একটি মাইক্রো-পরিষেবা পরিবেশে একটি নতুন পরিষেবা বিকাশ করছি। এটি একটি রেস্ট পরিষেবা। সরলতার জন্য, আসুন যে পথটি: / ইতিহাসপুস্তকগুলি বলা যাক

এবং এই পথটির জন্য পোষ্ট পদ্ধতিটি একটি নতুন ইতিহাসের বই তৈরি করে।

আসুন ধরে নেওয়া যাক ইতিহাসের ইতিহাসে ইতিহাসের এক বা একাধিক যুগের ইতিহাস রয়েছে।

বংশবৃদ্ধির জন্য, ধরে নেওয়া যাক আমাদের কাছে মানব ইতিহাসের কেবল নিম্নলিখিত যুগ রয়েছে:

  • প্রাচীন
  • ক্লাসিকাল পোস্ট
  • আধুনিক

আমার কোডে, আমি তাদের একটিতে উপস্থাপন করতে চাই enum

পদ্ধতির বডি (পে-লোড) JSON ফর্ম্যাটে রয়েছে এবং এতে একটি ফিল্ডের নাম অন্তর্ভুক্ত করা উচিত eras। এই ক্ষেত্রটি eraমানগুলির একটি তালিকা , যা এই বইয়ের অন্তর্ভুক্ত।

শরীর দেখতে দেখতে দেখতে:

{
  "name": "From the cave to Einstein - a brief history review",
  "author": "Foo Bar",
  "eras": ["Ancient", "Post Classical", "Modern"]
}

এই নির্দিষ্ট পরিষেবাটিতে ব্যবসায়ের যুক্তিটি হ'ল:
যদি ইনপুটটিতে কোনও যুগ সরবরাহ না করা হয় তবে এই বইটি সমস্ত যুগকে কভার করে বিবেচনা করা হয় ।

এপিআই পর্যালোচনায়, একটি প্রস্তাব তৈরি করা হয়েছিল:
অন্য মান অন্তর্ভুক্ত করুন, ALL, যুগের enum জন্য স্পষ্টভাবে করার ইঙ্গিত দেয় যে যুগের সব আচ্ছাদিত করা হয়।

আমি মনে করি এটির কিছু উপকারিতা এবং কনস রয়েছে।

পেশাদাররা:

সুস্পষ্ট ইনপুট

কনস:

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

যদি আমি একটি ক্যোয়ারী চালিত করি তবে নির্দিষ্ট যুগ (গুলি) কভার করে এমন বইগুলির জন্য, আমি কীভাবে সমস্ত যুগের বইয়ের প্রতিনিধিত্ব করব? তাহলে ALLএছাড়াও আউটপুট (একই যুক্তি ব্যবহার করে) জন্য ব্যবহার করা হয়, তাহলে এটি ব্যাখ্যা করা ক্রেতার দায়িত্ব ALLযেমন ["Ancient", "Post Classical", "Modern"]

আমার প্রশ্ন

আমি মনে করি যে নতুন ALLহওয়াটি একেবারেই না থাকার চেয়ে আরও বিভ্রান্তির কারণ ঘটায়।

আপনি কি মনে করেন? আপনি কি এই ALLমানটি যুক্ত করবেন বা আপনার এপিআই ছাড়াই রাখবেন?


7
আপনি যদি পারমাণবিক যুগ যোগ করতে চান তবে কী হবে? "সমস্ত" যুগের যে বইগুলি অন্তর্ভুক্ত রয়েছে সেগুলি কী যাদুতে নতুন সামগ্রী পেয়েছে? আপনি কি বইয়ের বিষয়বস্তু সম্পর্কে মিথ্যা কথা বলতে শুরু করেন? আপনি কি সব কিছু দিয়ে যান এবং আপডেট করেন? এটি অযৌক্তিক হতে পারে যদি কিছু বইতে ইতিমধ্যে পারমাণবিক যুগ সম্পর্কে সামগ্রী থাকে।
বিট্রি

উত্তর:


13

আপনার উপলব্ধ যুগগুলি কলিং অ্যাপ্লিকেশনে উপলব্ধ কিনা তা নির্ভর করে। সম্ভবত তারা তাই তাই ব্যবহারকারীরা তাদের আগ্রহ কী তা নির্বাচন করতে পারেন that's যদি এটি হয় তবে এটি একটি "সমস্ত" বিকল্প সরবরাহ করার জন্য একটি সামনের দিকে সমস্যা issue এটি যদি আমি হতাম তবে এটি "সমস্ত" বিকল্পের পরিবর্তে সমস্ত যুগের একটি তালিকা প্রেরণ করবে। যদি তা না হয় তবে আপনার একটি "সমস্ত" বিকল্পের প্রয়োজন এবং ঝুঁকিটি চালান যাতে সামনের প্রান্তটি বুঝতে পারে না এমন যুগ থেকে জিনিসগুলি ফিরে আসবে।

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

টি এল; ডিআর; বেশিরভাগ ক্ষেত্রে "সমস্ত" একটি UI আশি এবং আপনি পরিষেবা স্তরে একই জিনিস অর্জন করতে পারেন কোনও দ্বিধাগ্রস্থতা ছাড়াই এটি করবেন না।


6

যদি ইনপুটটিতে কোনও যুগ সরবরাহ করা না থাকে তবে এই বইটি সমস্ত যুগকে কভার হিসাবে বিবেচনা করা হবে।

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

ব্যবহারকারীদের ইনপুটটি বৈধ কিনা তা বৈধ করার জন্য এবং অনুরোধটি সঠিকভাবে পরিচালনা করার ক্ষেত্রেও বিশেষ ক্ষেত্রে প্রায়শই আরও জটিল কোডের দিকে পরিচালিত করে।


1

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

মনে হচ্ছে আপনার কাছে সময়কালের জন্য দ্বি-স্তরের অনুসন্ধানের মানদণ্ড রয়েছে:

  1. বুলিয়ান, is_selective?
  2. সেট, নির্দিষ্ট বিভাগের বিভাজন

কলার নির্দিষ্ট করতে পারেন (মিথ্যা, উপেক্ষিত) বা (সত্য, ancient 'প্রাচীন', 'আধুনিক'})।

অথবা আপনি শূন্য সেটটি ওয়াইল্ডকার্ড হিসাবে ব্যাখ্যা করতে বেছে নিতে পারেন, এটি নির্বাচনী নয় বলে বোঝায়।

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


1

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

স্থানীয় ডেটা স্ট্রাকচার

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

// C++-inspired pseudo-code
enum Era { ancient, post_classical, modern };
using Eras = Collection<Era>;

একজন allগণক হলেন না কারণ এটি সেই দুটি প্রকারকে একসাথে মিশিয়েছে। এটি একটি একক বিভাগ নয়, সমস্ত সম্ভাব্য বিভাগের সংগ্রহ।

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

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

তালিকার দুটি আইটেম সরবরাহ করা থাকলে, সমস্ত এবং প্রাচীন বলুন - অ্যাপ্লিকেশন থেকে কী নেওয়া হবে? [...]

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

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

সিরিয়ালযুক্ত ডেটা (জেএসএন)

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

শেষ ব্যবহারকারীর জন্য ইউআই

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


1

আমি মনে করি যে নতুন সমস্ত হওয়া মোটেও তা না করার চেয়ে আরও বিভ্রান্তির সৃষ্টি করে।

হ্যাঁ.

যদি আপনি সংগ্রহের দৃষ্টিকোণ থেকে চিন্তা করেন: আপনার কাছে কোনও কিছুর পুরো সংগ্রহ রয়েছে। এবং আপনি যখনই কেবল সেই সংগ্রহের একটি উপসেট চান, আপনাকে কোনও ধরণের ফিল্টারকন্ডিশন সরবরাহ করতে হবে , যখন কোনও উপাদানকে এই উপসেটটির উপাদান হিসাবে বিবেচনা করা হয়। এবং ALLকেস, যখন কোনও ফিল্টার প্রয়োগ করা হয় না, "ফিল্টারকন্ডিশন হয় না ALL"

যদি ইনপুটটিতে কোনও যুগ সরবরাহ করা না থাকে তবে এই বইটি সমস্ত যুগকে কভার হিসাবে বিবেচনা করা হবে।

আমি এটিকে উল্টো করে দেব: এই বইটিতে কোনও নির্দিষ্ট যুগের অন্তর্ভুক্ত নেই

এটি কোনও প্রশ্নের দৃষ্টিকোণ থেকেও সামঞ্জস্যপূর্ণ:

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

একমাত্র পয়েন্ট, যেখানে আমি যুক্ত করব ALL- বিভাগটি ব্যবহারকারীর সুবিধার জন্য, কারণ "সবকিছু" এর পরিবর্তে "কিছুই না" নির্বাচিত হওয়া আরও বিরক্তিকর হতে পারে।


0

আমি সম্প্রতি একটি বেসিক শিডিয়ুলার বাস্তবায়ন করেছি এবং @ লজটইনস্পেস ইতিমধ্যে এর বেশিরভাগটি ইউআই চিনির উল্লেখ করেছে।

বিকল্পগুলির মধ্যে একটি নির্বাচন করার সময় ব্যবহারকারী কী অর্জন করবে সে সম্পর্কে ব্যবহারকারী ইন্টারফেসটি একেবারে পরিষ্কার হওয়া দরকার।

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

প্রযুক্তিগতভাবে এর অর্থ যদি ব্যবহারকারী "উইকএডস" নির্বাচন করেন তবে ইউআইতে পাঁচটি চেকবক্স টিক থাকবে এবং এনাম "কার্যদিবস" মানটি ব্যবহার করবে। যদি কোনও একটি চেকবাক্স অবরুদ্ধ থাকে তবে "কার্যদিবস" মানটি বাকি চার দিনের একটি বা এড বিট মানচিত্রের সাথে প্রতিস্থাপিত হয়।

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

আমি মনে করি যে একটি ভাল ওরিয়েন্টেশন হ'ল "সমস্ত" বিকল্পটি ব্যবহার করে এবং "সমস্ত" বিকল্পটি বোধগম্য হয় যদি "সমস্ত" কী কী অন্তর্ভুক্ত করে (এক সপ্তাহের সমস্ত দিন) ধারণাটি বুঝতে পারে বা যদি গুরুত্বহীন হয় (অ্যামাজনে সমস্ত বিভাগ অনুসন্ধান করে)


0

আমি স্পষ্টভাবে একটি সমস্ত এনাম বহন করার ধারণাটি পছন্দ করি তবে আমি তাদের পতাকা হিসাবে সেট করব

const enum = {
    ALL: { value: 0 },
    ANCIENT: { name: 'Ancient', value: 1 },
    POST_CLASSICAL: { name: 'Post Classical', value: 2 },
    MODERN: { name: 'Modern', value: 4 }
}

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

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

যদিও এর পরিবর্তে আমার কাছে একটি নন পতাকা থাকবে এবং ক্লায়েন্ট যখন নন ব্যবহার করা হয় তখন কী করা উচিত তা সিদ্ধান্ত নিতে দেয়, যদি পরে ব্যবসায় পরিবর্তন হয়।

যদি এই বাস্তবায়ন গৃহীত হয়, আশেপাশের পদচারণাগুলি পাশ না করে, আপনি পরিবর্তে নির্বাচিত মানগুলির যোগফলটি পাস করবেন।

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