চালান এবং রসিদ একই প্রবেশদ্বার ভাগ করে। কিভাবে দুটি কাঠামোর মিশ্রণ এড়াতে?

একটি ইন্টারফেস ইনভয়েস এবং রসিদ উভয়ই গ্রহণ করে এবং "সমস্ত ক্ষেত্র ঐচ্ছিক" সহ বড় বস্তু লেখা সহজ। এই জাতীয় বস্তু যে কোনও কিছু ধারণ করতে পারে তবে এটি ঠিক কী পেয়েছে তা বলা কঠিন। দুটি পৃথক চুক্তি রাখা এবং স্পষ্ট টাইপ ক্ষেত্র সহ তাদের মধ্যে একটি নির্বাচন করা আরও পরিষ্কার হবে৷

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

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

চালান এবং রসিদের ভাগ করা প্রবেশদ্বার কীভাবে মোকাবেলা করবেন? এক বাক্যে উপসংহার

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

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

কেন আপনি একটি বিস্তৃত বস্তু ব্যবহার করতে পারবেন না?

সমস্ত ক্ষেত্র ঐচ্ছিক করার ঝুঁকি

যখন একটি ইন্টারফেস ইনভয়েস এবং রসিদ উভয়ই গ্রহণ করে, তখন "সমস্ত ক্ষেত্র ঐচ্ছিক" সহ বড় বস্তু লেখা সহজ। এই ধরনের একটি বস্তু প্রকৃতপক্ষে বিভিন্ন ধরনের ইনপুট গ্রহণ করতে পারে, কিন্তু খরচে:

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

একটি পরিষ্কার পদ্ধতি হ'ল দুটি পৃথক চুক্তি রাখা এবং একটি পরিষ্কার ধরণের ক্ষেত্র সহ একটি নির্বাচন করা।

ওয়ানঅফ কেবল তাদের মধ্যে একজন নয়

ওভারল্যাপিং শাখাগুলি বৈধ ইনপুট ব্যর্থতার কারণ হতে পারে

oneOf এর জন্য ইনপুটটি ঠিক একটি শাখার সাথে মেলে যেতে হবে। যদি উভয় শাখা একসাথে পাস হয়, তবে সামগ্রিক বৈধতাও ব্যর্থ হবে।

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

ওভারল্যাপ দূর করতে ধরণের এবং কনস্ট ব্যবহার করুন

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

সংমিশ্রণের নিয়ম সম্পর্কে আরও তথ্যের জন্য, JSON স্কিমা সংমিশ্রণের নিয়ম দেখুন।

একটি এক্সিকিউটেবল ডাইভারশন প্রোটোকল

from jsonschema import Draft202012Validator

def branch(kind, identity):
    return {
        "type": "object", "additionalProperties": False,
        "required": ["kind", identity],
        "properties": {"kind": {"const": kind},
                       identity: {"type": "string", "minLength": 1}}
    }

schema = {"oneOf": [branch("invoice", "invoice_number"),
                    branch("receipt", "receipt_number")]}
v = Draft202012Validator(schema)
valid = lambda x: not list(v.iter_errors(x))
assert valid({"kind": "invoice", "invoice_number": "I-1"})
assert valid({"kind": "receipt", "receipt_number": "R-1"})
assert not valid({"kind": "invoice", "receipt_number": "R-1"})
assert not valid({"kind": "receipt", "receipt_number": ""})
assert not valid({"kind": "invoice", "invoice_number": "I-1",
                  "receipt_number": "R-1"})
assert not valid({"kind": "unknown"})

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

যদি ব্যবসাটি অতিরিক্ত ক্ষেত্রগুলির অনুমতি দেয় তবে এই ক্ষেত্রগুলির জন্য নেমস্পেসগুলি নীরবে সমস্ত সীমাবদ্ধতা অপসারণ করার পরিবর্তে স্পষ্টভাবে সংজ্ঞায়িত করা উচিত।

শুধু "মিসম্যাচ" ত্রুটি বার্তা প্রদর্শন করবেন না

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

ইনপুট বৈশিষ্ট্যপ্রকৃত সন্দেহমতামত সুপারিশ করুন
এক ধরনের ঘাটতিচুক্তিটি চয়ন করা যাচ্ছে নাদয়া করে নথির ধরণ সরবরাহ করুন
প্রকার এবং সংখ্যা ক্ষেত্রগুলির দ্বন্দ্বদুটি কাঠামো মিশ্রিতপরস্পরবিরোধী ক্ষেত্র এবং তাদের উত্সগুলি প্রদর্শন করুন
সংখ্যাযুক্ত খালি স্ট্রিংকীটি বিদ্যমান কিন্তু এর কোন মূল্য নেইসংখ্যাযুক্ত এলাকার দিকে ফিরে তাকান
অজানা ধরনবর্তমান চুক্তি এটি কভার করে নাশ্রেণিবদ্ধ করার জন্য স্বতন্ত্র সারিতে প্রবেশ করুন

অনিশ্চিত প্রকারেরও একটি প্রস্থান প্রয়োজন

যদি শ্রেণিবিন্যাস চালান এবং প্রাপ্তির মধ্যে পার্থক্য করতে না পারে তবে "সাফল্য" করার জন্য এলোমেলোভাবে একটি শাখা নির্বাচন করার পরিবর্তে অজানা স্থিতিটি ধরে রাখা উচিত।

এখানে তিনটি ভিন্ন স্তর রয়েছে যা আলাদাভাবে বিবেচনা করা দরকার:

  • ক্যাটাগরি কনফিডেন্স : ডকুমেন্টের প্রকারগুলি বিচার করার ক্ষেত্রে সিস্টেমটি কতটা আত্মবিশ্বাসী।
  • কাঠামো যাচাইকরণ : নির্বাচিত চুক্তিটি পূরণ হয়েছে কিনা তা লিখুন।
  • ব্যবসায়ের সত্যতা : নথিগুলি নিজেরাই আসল এবং বৈধ কিনা।

কাঠামোগত যাচাইকরণ সঠিক বলে বিপরীত-প্রমাণিত হতে পারে না, বা এটি প্রমাণ করতে পারে না যে নথিটি আসল কিনা।

অনুবাদ প্রক্রিয়ায় ডকুমেন্টের ধরনও ধরে রাখতে হবে

একই ক্ষেত্রের জন্য বিভিন্ন নথিতে বিভিন্ন পরিভাষার প্রয়োজন হতে পারে। OmniDoc পরিভাষা এবং দ্বিভাষিক পর্যালোচনা ওয়ার্কফ্লো ব্যবহার করার সময়, ডেলিভারি তালিকার সাথে ডকুমেন্টের প্রকারগুলি সরবরাহ করা পর্যালোচকদের সংখ্যা এবং পরিমাণের প্রসঙ্গ বুঝতে সহায়তা করে।

একটি বিস্তৃত জেএসওএন অবজেক্টকে এই পার্থক্যগুলি মুছে ফেলতে দেবেন না।

📊 মূল তুলনা

পদ্ধতিনথির ধরন কি স্পষ্টভাবে সংজ্ঞায়িত করা যায়?শাখাগুলি ওভারল্যাপ করার সময় প্রকাশগুলিঅজানা প্রকারের হ্যান্ডলিং
সমস্ত ক্ষেত্র ঐচ্ছিক সহ ব্রড অবজেক্টকী পাওয়া গেছে তা ব্যাখ্যা করা কঠিনপ্রযোজ্য নয়; ক্ষেত্রগুলির মধ্যে কোনও শাখার সীমানা নেইপ্রশস্ত লক্ষ্য দ্বারা সহজেই গ্রাস করা যায় এবং লক্ষ্য করা কঠিন
দুটি স্বাধীন চুক্তি + প্রয়োজনীয় ধরণেরকাইন্ড ফিল্ড ব্যবহার করে স্পষ্টভাবে নির্বাচন করুনওভারল্যাপ কমাতে মানগুলি ঠিক করতে কনস্ট ব্যবহার করুনঅজানা অবস্থা ছেড়ে দিন এবং বাছাই করার জন্য সারিটি প্রবেশ করুন

🎯 কোন পদ্ধতিটি আপনার জন্য উপযুক্ত?

যদি আপনার একই সময়ে চালান এবং রসিদ উভয়ই পাওয়ার প্রয়োজন হয়

দুটি পৃথক চুক্তি রাখুন এবং প্রয়োজনীয় ক্ষেত্র হিসাবে kind সেট করুন।

যদি আপনার শাখা ক্ষেত্রগুলি ব্যাপকভাবে ওভারল্যাপ হয়

একসাথে একাধিক শাখার সাথে মিলে যাওয়া বৈধ ইনপুট এড়াতে প্রতিটি শাখায় const এর সাথে kind ঠিক করুন।

যদি আপনার সিস্টেম অতিরিক্ত ক্ষেত্রের অনুমতি দেয়

প্রথমে, অতিরিক্ত ক্ষেত্রের নামস্থানটি পরিষ্কার করুন, তারপরে কীভাবে সীমাবদ্ধতাগুলি শিথিল করবেন তা সিদ্ধান্ত নিন।

যদি আপনার ক্লাসিফায়ার যথেষ্ট নিশ্চিত না হয়

অজানা স্থিতি রাখুন এবং বাছাই করার জন্য সারিতে নথি প্রেরণ করুন; জোর করে শাখা নির্বাচন করবেন না।

❓ প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)

1. কেন কেবল এমন একটি অবজেক্ট ব্যবহার করবেন না যেখানে সমস্ত ক্ষেত্র ঐচ্ছিক?

এই ধরনের সঙ্গী যে কোনও কিছু জাল করতে পারে, তবুও তারা ঠিক কী পায় তা বলা শক্ত।

2. কেন ওয়ানঅফ একটি বৈধ এন্ট্রি ব্যর্থতার কারণ হয়?

oneOf এর জন্য একটি শাখার সাথে হুবহু মিল প্রয়োজন। উভয় শাখা একযোগে পাস করলে সামগ্রিক চেক ব্যর্থ হবে। এই পরিস্থিতি হওয়ার সম্ভাবনা রয়েছে যখন শাখা ক্ষেত্রগুলি ব্যাপকভাবে ওভারল্যাপ করে।

3. অতিরিক্ত ক্ষেত্রগুলির অনুমতি দেওয়ার সময় আপনার কী মনোযোগ দেওয়া উচিত?

অতিরিক্ত ক্ষেত্রের জন্য নামস্থানটি স্পষ্টভাবে সংজ্ঞায়িত করা উচিত, নীরবে সমস্ত সীমাবদ্ধতা অপসারণ করার পরিবর্তে।

4. ক্লাসিফায়ার যদি ডকুমেন্টের ধরণ নির্ধারণ করতে না পারে তবে কী হবে?

অজানা অবস্থা রাখুন এবং শ্রেণিবদ্ধ করার জন্য একটি স্বতন্ত্র সারি প্রবেশ করুন; একটি সফল শাখা একত্রিত করার জন্য এলোমেলোভাবে একটি শাখা নির্বাচন করবেন না।

5. কাঠামোগত যাচাইকরণ পাস করা কি নথিগুলির সত্যতা প্রমাণ করে?

না। শ্রেণিবিন্যাস আস্থা, কাঠামোগত যাচাইকরণ এবং ব্যবসায়ের সত্যতা তিনটি স্বতন্ত্র স্তর; কাঠামোগত যাচাইকরণ নথিগুলির সত্যতা প্রমাণ করতে পারে না।

📝 সারসংক্ষেপ

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

এখনই অভিজ্ঞতা: অনুবাদ শুরু করতে আপনার নথি আপলোড করুন, মূল ফর্ম্যাটিং সংরক্ষণ করুন

আপডেট করা হয়েছে 2026-11-15