সেরা অনুশীলন - আপনার নিজস্ব প্রকল্প / অ্যাপ্লিকেশনটির জন্য এনএসইরর ডোমেন এবং কোড


114

আপনার নিজস্ব ফ্রেমওয়ার্কগুলির জন্য ত্রুটি ডোমেন সেট আপ করার বিষয়ে পূর্ববর্তী একটি এসও পোস্ট রয়েছে তবে আপনার নিজের প্রকল্প / অ্যাপ্লিকেশনটির জন্য ত্রুটি ডোমেন এবং কাস্টম ত্রুটি কোডগুলি সেটআপ করার বিষয়ে সেরা অনুশীলনটি কী? কী?

উদাহরণস্বরূপ, ধরুন আপনি প্রচুর বৈধতা সহ একটি কোর ডেটা-ইনটেনসিভ অ্যাপ্লিকেশনটিতে কাজ করছেন, আপনার যদি কেবল "শেল্ফের বাইরে" কোর ডেটা ত্রুটি কোডগুলি (যেমন NSManagedObjectValidationErrorথেকে CoreDataErrors.h) থাকা উচিত বা আপনার নিজের তৈরি করা উচিত MyAppErrors.hএবং এর সাথে ত্রুটিগুলি সংজ্ঞায়িত করা উচিত আরও নির্দিষ্টতা (যেমন,MyAppValidationErrorInvalidCombinationOfLimbs ,?

একটি কাস্টম ত্রুটি ডোমেন তৈরি করা এবং ত্রুটি কোডের সেটটি আপনার কোডকে উল্লেখযোগ্যভাবে ছত্রভঙ্গ করতে পারে, তবে এটি কি খুব বেশি ওভারহেড বজায় রাখতে পারে এবং ত্রুটি কোড নম্বর সংঘাতের বিষয়ে কারও কি চিন্তা করতে হবে? নাকি এখানে অন্যান্য উদ্বেগ রয়েছে?

উত্তর:


152

আমি ব্যক্তিগতভাবে একটি বিপরীত- DNS স্টাইল ডোমেন ব্যবহার করি। উদাহরণ স্বরূপ:

NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];

ডোমেনের তৃতীয় অংশটি ( @"myproject") কেবলমাত্র "My Project"অন্য প্রকল্পের ত্রুটি থেকে এই প্রকল্প ( ) থেকে ত্রুটিগুলি পৃথক করতে ব্যবহৃত হয় ( "My Other Project"=> com.davedelong.myotherproject)।

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

কোড সংখ্যার দ্বন্দ্ব হিসাবে, এটি সম্পর্কে চিন্তা করবেন না। কোডগুলি কোনও ডোমেনের মধ্যে যতক্ষণ না স্বতন্ত্র, ততক্ষণ আপনার উচিত।

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

আপনি যা করতে পারেন তা ফ্রেমওয়ার্কটি উত্পন্ন ত্রুটি ক্যাপচার এবং এটিকে আপনার নতুন ডোমেন এবং জেনেরিক কোড, এমন কিছু kFrameworkErrorCodeUnknownবা অন্য কিছুযুক্ত একটি নতুন ত্রুটিযুক্ত বস্তুতে মোড়ানো এবং তারপরে ক্যাপচার করা ত্রুটিটি এর userInfoনীচে রাখুন NSUnderlyingErrorKey। CoreData এই অনেক (উদাহরণস্বরূপ, যদি আপনি চেষ্টা করে save:একটি NSManagedObjectContext, কিন্তু আপনি সম্পর্ক অখণ্ডতা ত্রুটি আছে, আপনি একটি একক ত্রুটি ফিরে পাবেন, কিন্তু NSUnderlyingErrorKeyবিশেষভাবে যা সম্পর্ক ভুল মত আরো অনেক কিছু তথ্য, ইত্যাদি থাকতে হবে)।


যেহেতু আপেল বিপরীত ডিএনএসও ব্যবহার করে এটি অন্যদের জন্য এই স্টাইলটি ব্যবহার করা উপযুক্ত বলে মনে হয়।
জোহান কার্লসন

36

আমি মন্তব্য করার জন্য যথেষ্ট প্রতিনিধির নেই, কিন্তু ডেভ ডেলং দ্বারা গৃহীত উত্তরের জন্য, এটা কিছুটা ভাল ব্যবহার করতে হতে পারে [[NSBundle mainBundle] bundleIdentifier]পরিবর্তে @"com.myName.myProject"। এইভাবে, আপনি যদি নিজের নাম বা প্রকল্পের নাম পরিবর্তন করেন তবে তা সঠিকভাবে প্রতিফলিত হবে।


4
ভাল ধারণা. আপনি যদি সুইফ্ট ব্যবহার করছেন, আপনার মোড়কযুক্ত alচ্ছিক ব্যবহার করা উচিত: NSBundle.mainBundle().bundleIdentifier!(আপনি যদি জানেন যে বান্ডিল শনাক্তকারীটি সেট করা আছে, যা আমি অনুমান করি যে সম্ভবত)
জুলুল

আপনি কেন ত্রুটি ডোমেনে প্রকল্পের নাম পরিবর্তন প্রতিফলিত করতে চান?
zrslv

1
@Zrxq বিভিন্ন ত্রুটিযুক্ত ডোমেন রয়েছে তা নিশ্চিত করার জন্য মূল্য রয়েছে তবে আপনি কল্পনা করুন যে আপনি আপনার প্রকল্পটির ভুল বানান করেছেন বা আপনি নিজের নামটি পরিবর্তন করেছেন যাতে এটি সর্বত্র প্রতিবিম্বিত হয়। এটি হার্ড কোডডের চেয়ে গতিশীল সেট করা ভাল।
কনার 17

1
@vare এটি অনেকটা পরিষ্কার, আমি আসলে বুঝতে পারি না যে এটি ব্যবহারিক উপকারগুলি কী সরবরাহ করবে। আমার বোঝা সেই শনাক্তকারীদের কেবল অ্যাপ্লিকেশনের প্রসঙ্গে অনন্য হওয়া দরকার all ঠিক আছে, সম্ভবত আপনি তাদের আরও নান্দনিকভাবে আনন্দিত করতে চান, আমি এটি পেয়েছি!
zrslv

1
হ্যাঁ, আপনি একটি ভাল বিষয় আনতে হবে। এমন সময় আছে যখন আপনি ডোমেনটি অনন্য হতে চান, আমি ধরে নিব ... উদাহরণস্বরূপ আপনি যদি একটি এসডিকে বা (কোকো) পোড তৈরি করেন তবে আপনি চাইবেন যে আপনার ত্রুটি ডোমেনটি কোথা থেকে এসেছে তা প্রতিবিম্বিত হোক, প্রকল্পের নয় নাম দিন। সম্পাদনা: আমিও (আমার উত্তরে) এটি নির্দেশ করতে চেয়েছিলাম যে @ "com.myName.myProject" এই ক্ষেত্রে বান্ডিলআইডেন্টিফায়ারের অনুরূপ, যা লোকেরা হয়ত জানেন না।
কনার

4

কীভাবে একটি কাস্টম এনএসইররার তৈরি করবেন:

প্রথমে ত্রুটি বার্তার একটি অভিধান তৈরি করুন

NSDictionary *userInfo = @{   
   NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown Error - Please try again", nil),
   NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Unknown Error - Please try again", nil),
   NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Unknown Error - Please try again", nil)
                                               };
NSError *error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] 
  code:-58 userInfo:userInfo];

তারপরে ইউজারআইফোনটিকে এনএসডিকোরিয়ায় এবং আপনার সম্পন্ন করার জন্য নির্ধারণ করুন।

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