ব্যতিক্রমগুলির গ্রানুলারিটি


9

আমি কয়েকজন বন্ধু এবং I এর মধ্যে বিতর্ক চালিয়েছি They তারা ব্যতিক্রমের ক্ষেত্রগুলি ClientErrorExceptionএবং বিশদ ServerErrorExceptionসহ সাধারণ ব্যতিক্রমগুলি পছন্দ করে , আমি জিনিসগুলিকে আরও নির্দিষ্ট করে তোলা পছন্দ করি। উদাহরণস্বরূপ, আমার হাতে কয়েকটি ব্যতিক্রম থাকতে পারে:

  • BadRequestException
  • AuthenticationFailureException
  • ProductNotFoundException

ত্রুটি কোডের উপর ভিত্তি করে এগুলির প্রত্যেকটিই এপিআই থেকে ফিরে আসে।

ব্যতিক্রমগুলির সুবিধাগুলি অনুসরণ করে এটি জাভার কাছে মূ .় বলে মনে হচ্ছে। তবে আমার বন্ধুদের মতামত হুবহু অস্বাভাবিক নয়।

কোড পঠনযোগ্যতা এবং এপিআই ব্যবহারযোগ্যতার ক্ষেত্রে কোনও পছন্দসই উপায় আছে, বা এটি কি কেবলমাত্র পছন্দটিতে নেমে আসে?


আপনার লিঙ্ক করা পৃষ্ঠাটি সম্ভবত আমরা পেতে পারি তার সেরা নির্ভুল উত্তর answer আপনি সত্যিই একটি মতামত চাইছেন। আমার অভিজ্ঞতা এবং মতামত কী তা দিয়ে আমি উত্তর দিতে পারি, তবে এটি উদ্দেশ্যমূলক উত্তর নয়।
মার্সাতাতো

পছন্দ করেছেন আমি অনুমান করি আমি আমার অবস্থানের ন্যায্যতা খুঁজছি। আমি যে লাইব্রেরিগুলিতে লিখি সেগুলিতে লোকেরা যা প্রত্যাশা করে তা আমি রাখি, গাইড অনুসরণ না করে যদি এর অর্থ এটি আমার জিনিসগুলি ব্যবহার করা সহজ করে তোলে, আপনি কি জানেন?

আমি একেবারে একমত। আমি আমার ব্যতিক্রম ক্লাস গ্রানুলারও আছে। এছাড়াও, আপনি abstractগেটর পদ্ধতির সাহায্যে ব্যতিক্রমী ক্লাস সংজ্ঞায়িত করতে পারেন এবং তারপরে দানাদারগুলি সাধারণের প্রসারিত করতে পারেন। যেমন AuthenticationFaliureException extends ClientErrorException। এই পদ্ধতিতে, প্রতিটি ব্যবহারকারী কীভাবে ব্যতিক্রমগুলি মোকাবেলা করতে চান তা চয়ন করতে পারেন। এটি আরও কাজ যদিও স্পষ্টতই। তবে, অ্যাপ্লিকেশন লেখার সময় (লাইব্রেরির পরিবর্তে) এটি আলাদা পরিস্থিতি আইএমএইচও। সেক্ষেত্রে সরলতার জন্য আমি ব্যতিক্রমগুলি আপনার প্রয়োজনের চেয়ে বেশি দানাদার হিসাবে তৈরি করব না।
মার্সাতাতো

@ মার্সাতাতো আসলে এটি এখনই আমি এটি বাস্তবায়ন করি। আমি সন্তুষ্ট আপনি সম্মত হন। আমি রাতারাতি প্রশ্নটি খোলা রাখব, তবে দয়া করে

উত্তর:


15

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

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

  • আপনি কি সত্যই আশা করেন যে আপনার কোডের কলকারী বিভিন্ন ধরণের ত্রুটির সাথে বিভিন্ন প্রবাহের নিয়ন্ত্রণের সাথে আলাদাভাবে প্রতিক্রিয়া দেখাবে?

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

  • কিছু অ্যাপ্লিকেশন, যেখানে আপনার বা টিমের পুরো কোড বেস আপনার নিয়ন্ত্রণে আছে?

  • বা তৃতীয় পক্ষের জন্য কিছু পুনরায় ব্যবহারযোগ্য উপাদান, যেখানে আপনি সমস্ত সম্ভাব্য কলার জানেন না?

  • একটি দীর্ঘ চলমান সার্ভার অ্যাপ্লিকেশন, যেখানে বিভিন্ন ধরণের ত্রুটিগুলি পুরো সিস্টেমটিকে তত্ক্ষণাত ভেঙে না ফেলে এবং বিভিন্ন ধরণের ত্রুটি প্রশমনের প্রয়োজন হতে পারে?

  • একটি স্বল্প-জীবিত অ্যাপ্লিকেশন প্রক্রিয়া যেখানে ব্যবহারকারীর কাছে ত্রুটি বার্তা প্রদর্শন করতে এবং তারপরে প্রক্রিয়াটি পুনরায় চালু করতে ত্রুটির ক্ষেত্রে এটি যথেষ্ট?

সুতরাং আপনি আপনার উপাদানগুলির সম্ভাব্য কলারগুলি সম্পর্কে যত বেশি জানেন, আপনি আপনার যাত্রার জন্য বিশদ বিশদের সঠিক স্তরের বিষয়ে আরও ভাল সিদ্ধান্ত নিতে পারবেন।


3
"আপনি কি সত্যই আশা করেন যে আপনার কোডের কলকারী বিভিন্ন ধরণের ত্রুটির সাথে বিভিন্ন প্রবাহের নিয়ন্ত্রণের সাথে আলাদাভাবে প্রতিক্রিয়া দেখাবে?" এটি জিজ্ঞাসা করার জন্য একটি দুর্দান্ত প্রশ্ন। আপনাকে ধন্যবাদ, আমি এটি মনে করতে যাচ্ছি।

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

1

উত্তরটি কী স্তরের ত্রুটি প্রতিবেদন করার বিষয়ে আমরা নির্ভর করি তার উপর নির্ভর করে।

সাধারণভাবে আমি আপনার বন্ধুদের সাথে একমত, সমস্যার কারণ জানাতে আপনার প্রয়োজনের তুলনায় এগুলি আরও দানাদার করা উচিত নয়।

নালকে রেফারেন্স করার জন্য যদি একটি সাধারণ, সুপরিচিত ব্যতিক্রম হয় তবে (নালরফেরেন্সএক্সেপশন) আপনার নিজের মাইওবজেক্টআইএস নালএক্সেপশন তৈরি করা উচিত নয়। এটি মানব দোভাষীর জন্য কেবল বিভ্রান্তির একটি স্তর যুক্ত করবে, এটি শেখার জন্য একটি অতিরিক্ত জিনিস যা কিছুই স্পষ্ট করে না।

কেবলমাত্র যখন আপনার ব্যতিক্রমটি বিশেষ হয় যে কোনও পূর্বনির্ধারিত নেই যা মূল কারণটি কভার করে you আপনার নিজের তৈরি করা উচিত।

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

প্রথমে এটি পরিষ্কার হয়ে যাবে যে আপনার উপাদান সমস্যার মধ্যে পড়েছে। নিম্ন লিভারে, সুনির্দিষ্ট কারণটি অভ্যন্তরীণ ব্যতিক্রম হতে পারে।


এটা সঙ্গত. সুতরাং আপনি পরামর্শ দিচ্ছেন যে কোনও ভাল ইতিমধ্যে উপস্থিত থাকলে কোনও নতুন ব্যতিক্রম আবিষ্কার করবেন না?

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