ব্যতিক্রমগুলি সহ ব্যবসায়ের নিয়মের প্রতিনিধিত্ব করা


16

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

অন্য পদ্ধতিতে এটির সাথে কোনও স্ট্যাটাস বা এর মতো কিছু রয়েছে

অন্য কোন পন্থা আছে? আপনি এটা সম্পর্কে কি মনে করেন কিভাবে?

উত্তর:


15

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

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


1
আমি ঠিক আমার অ্যাপগুলিতে এটি পরিচালনা করি। আমার জীবনকে সহজ করে তুলতে ফ্লুয়েটভ্যালিডেশন ব্যবহার করা এবং ভ্যালিডেটএন্ডথ্রো পদ্ধতিটি আমার দিনকে বাঁচায়।
মাত্তেও মোসকা

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

8
একটি ডোমেন নির্দিষ্ট ব্যতিক্রম নিক্ষেপ । এটি আপনাকে আমাদের এবং আমাদের চেয়ে উচ্চের মধ্যে আলাদা করতে দেয় ।

@ থরবজর্ন রাভন অ্যান্ডারসন +1 "ডোমেন নির্দিষ্ট" দুর্দান্ত সংযোজন
জাস্টিন ওহমস

1
@ জেমসপলসন এটির JamesPoulsonExceptionএকটি সাবক্লাস হিসাবে তৈরি করতে RuntimeExceptionএবং তারপরে মূল হিসাবে ব্যতিক্রমটি সরবরাহ করার জন্য যথেষ্ট cause। তারপরে আপনি কেবল if (exception instanceof JamesPoulsonException)... আলাদা করতে বলতে পারেন। getCause()মূল ব্যতিক্রমটি পৌঁছানোর জন্য পদ্ধতিটি ব্যবহার করুন ।

9

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

ব্যবসায়ের বিধি প্রয়োগ করতে ব্যতিক্রম ব্যবহার করা ভাল ডিজাইন নয়।


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

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

@ অ্যাডাম - ঠিক বলেছেন এবং ঠিক ঠিক পয়েন্টে।
ওয়াল্টার

1
@ অ্যাডাম - উদ্বেগ সম্পর্কিত বিষয়গুলি পৃথক করে আপনাকে অনুসরণ করবেন না। আমি ইউআইয়ের মধ্যে কারওও গ্রাহকনামইনলওয়ারকেসএক্সেপশন পরিচালনা করার প্রত্যাশা করি না (দয়া করে আমিও আশা করি যে ব্যতিক্রম এমনকি উপস্থিত নেই!)। আপনি কেবল একটি জেনেরিক বৈধতা ধারণাটি পরিচালনা করতে পারেন। তদুপরি, আমি আপনার সাথে 100% রয়েছি যে ইউআই কেবলমাত্র তথ্য এবং সমস্ত কিছু সংগ্রহ করে। আমি আগে যা বলেছিলাম তা হ'ল আপনি ইউআইতে যা-ই করেন না কেন, বিএলকে ধরেই নেওয়া উচিত নয় যে প্রতিটি ইনপুট ঠিক আছে। এটি কেবল কিছু ডিফেন্সিভ প্রোগ্রামিং।
ফেডার

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

5

ভাল ব্যবসায়িক যুক্তি তৈরি করতে কোনও ব্যতিক্রম নিক্ষেপের কী মূল্য আছে তা আমি দেখতে পাচ্ছি না। ব্যবসায়ের যুক্তি পরিচালনা করার জন্য কয়েক ডজন পন্থা রয়েছে যা কোনও সিস্টেমের ব্যবহারে অপ্রত্যাশিত অবস্থার সমাধানের জন্য বোঝানো একটি সিস্টেম ব্যবহার করে না।

এটা তোলে হয় প্রত্যাশিত যে ব্যবসা লজিক মধ্যে, শর্ত পূরণ না হবে; এটি প্রথম স্থানে থাকার কারণ এবং আপনি স্মৃতি ত্রুটি এবং নাল রেফারেন্সের কারণে অপ্রত্যাশিত I / O ব্যর্থতাগুলি পরিচালনা করে এমন একই পদ্ধতিতে আপনি পিগব্যাক করতে চান না। সেগুলি সিস্টেমের ব্যর্থতা, তবে অবিচ্ছিন্ন ব্যবসায়ের শর্ত সনাক্ত করা সিস্টেমের সফল অপারেশন।

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


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

2

ব্যবসায়ের বিধি প্রকাশ করা একটি জিনিস, সেগুলি বাস্তবায়ন করা আরেকটি বিষয়

ব্যবহারকারীর অভিজ্ঞতা সম্পর্কে চিন্তা করুন; যদি ব্যবহারকারী বিক্রয়কর্মী না হন তবে কেন তাদের এমন একটি বোতাম দিন যা 'চালান তৈরি করুন' বলে দেয় ?


1
আপনি কোনও বোতাম না দেওয়ার কারণে, এর অর্থ এই নয় যে তারা যেভাবেই আপনাকে কিছু করার জন্য বার্তা প্রেরণ করবেন না। সুরক্ষার নিয়মগুলি কতটা সহজ হবে তা ভাবুন যদি তা সবই ঘটে ..
jmoreno

যদি ব্যবহারকারীকে এক্স করার অনুমতি না দেওয়া থাকে তবে তাদের এমন একটি বোতাম দেবেন না যা "ডো এক্স" বলবে। সর্বোত্তম সুরক্ষা অজ্ঞতা - ব্যবহারকারীকে যে কাজগুলি তারা করতে পারে না সে সম্পর্কে বলবেন না;)
স্টিভেন এ। লো 20

1

এটি সম্পূর্ণভাবে নির্ভর করে যা করা হচ্ছে তার উপর।

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

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

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


0

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

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

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

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

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