আপনি ডিআরওয়াই নীতিটি ভঙ্গ করবেন যে যেখানেই একটি জিপ কোড ব্যবহৃত হয় সেই বৈধতা যুক্তি যুক্ত করে।
অন্যদিকে, অনেকগুলি বিভিন্ন দেশ এবং তাদের বিভিন্ন জিপকোড সিস্টেমগুলির সাথে ডিল করার সময়, এর অর্থ হ'ল আপনি জিপকোডকে বৈধ করতে পারবেন না যদি না আপনি দেশটিকে প্রশ্নবিদ্ধ না করেন। তাই তোমারZipCode
ক্লাসেরও দেশ সঞ্চয় করা দরকার।
তবে আপনি কি তখন আলাদাভাবে দেশটিকে Address
(যা জিপকোডও অংশ যার) এবং জিপকোডের (বৈধতার জন্য) উভয় অংশ হিসাবে সংরক্ষণ করেন ?
- যদি আপনি তা করেন তবে আপনি ডিআরওয়াইও লঙ্ঘন করছেন। এমনকি যদি আপনি এটিকে ডিআরওয়াই লঙ্ঘন নাও করেন (কারণ প্রতিটি উদাহরণ পৃথক উদ্দেশ্যে কাজ করে) তবে দুটি দেশের মান পৃথক হয়ে গেলে বাগের দরজা খোলার উপরে এটি অযথা অতিরিক্ত মেমরি গ্রহণ করে (যা তারা যুক্তিযুক্তভাবে কখনই করা উচিত নয়) থাকা).
- অথবা, বিকল্পভাবে, এটি আপনাকে দুটি ডেটা পয়েন্টগুলি সর্বদা একইরূপে নিশ্চিত করার জন্য প্রয়োজনীয় হতে পরিচালিত করে, যা প্রস্তাব দেয় যে আপনার এই ডেটাটি যেভাবেই হোক কোনও একক বিন্দুতে সংরক্ষণ করা উচিত, সুতরাং উদ্দেশ্যকে পরাস্ত করে।
- আপনি যদি তা না করেন তবে এটি কোনও
ZipCode
শ্রেণি নয় বরং একটি Address
শ্রেণি, যার আবার এমন একটি উপাদান থাকবে string ZipCode
যার অর্থ আমরা সম্পূর্ণ বৃত্তে এসেছি।
উদাহরণস্বরূপ, আমি একটি ব্যবসায়িক বিশ্লেষকের সাথে পোস্ট কোড থাকা স্ট্রিংয়ের পরিবর্তে একটি পোস্ট কোড সম্পর্কে কথা বলতে পারি।
সুবিধাটি হ'ল ডোমেন মডেলটি বর্ণনা করার সময় আপনি তাদের সম্পর্কে কথা বলতে পারেন।
আমি আপনার অন্তর্নিহিত দৃ understand়তাটি বুঝতে পারি না যে যখন কোনও টুকরোটিতে কোনও নির্দিষ্ট পরিবর্তনশীল প্রকার থাকে, আপনি যখনই কোনও ব্যবসায় বিশ্লেষকের সাথে কথা বলছেন তখন আপনাকে সেই ধরণের উল্লেখ করা একরকম বাধ্যবাধকতা রয়েছে।
কেন? আপনি কেবল "জিপকোড" সম্পর্কে কথা বলতে এবং নির্দিষ্ট ধরণের সম্পূর্ণরূপে বাদ দিতে কেন অক্ষম? আপনার ব্যবসায়ের (প্রযুক্তিগত নয়!) বিশ্লেষকের সাথে আপনি কী ধরনের আলোচনা করছেন যেখানে সম্পত্তির প্রকার কথোপকথনের সমান?
আমি যেখানে থেকে এসেছি, পোস্টকোডগুলি সর্বদা সংখ্যাসূচক থাকে। সুতরাং আমাদের একটি পছন্দ আছে, আমরা এটি একটি int
হিসাবে বা হিসাবে এটি সঞ্চয় করতে পারি string
। আমরা স্ট্রিংটি ব্যবহার করি কারণ ডেটাতে গাণিতিক ক্রিয়াকলাপের কোনও প্রত্যাশা নেই তবে কোনও ব্যবসায়িক বিশ্লেষক আমাকে কখনও বলেনি যে এটি স্ট্রিং হওয়া দরকার। এই সিদ্ধান্তটি বিকাশকারীকে ছেড়ে দেওয়া হয়েছে (বা যুক্তিযুক্তভাবে প্রযুক্তিগত বিশ্লেষক, যদিও আমার অভিজ্ঞতায় তারা সরাসরি কৌতুকপূর্ণ কৌতুক মোকাবেলা করে না)।
কোনও ব্যবসায়িক বিশ্লেষক যতক্ষণ না অ্যাপ্লিকেশনটি যা প্রত্যাশা করে তা করে, তথ্যের ধরণের বিষয়ে চিন্তা করে না।
বৈধতা মোকাবেলা করার জন্য একটি কৌশলযুক্ত জন্তু, কারণ এটি মানুষ যা প্রত্যাশা করে তার উপর নির্ভর করে।
একটি হিসাবে, কেন আদিম আবেগ এড়ানো উচিত সেই উপায় হিসাবে বৈধতা যুক্তির সাথে আমি একমত নই, কারণ আমি একমত নই যে (সর্বজনীন সত্য হিসাবে) ডেটা সর্বদা সর্বদা বৈধ হওয়া দরকার।
উদাহরণস্বরূপ, যদি এটি আরও জটিল চেহারা হয়? সাধারণ বিন্যাস চেকের পরিবর্তে, যদি আপনার বৈধতা কোনও বাহ্যিক এপিআইয়ের সাথে যোগাযোগ করে এবং প্রতিক্রিয়ার জন্য অপেক্ষা করে থাকে তবে কী হবে? আপনি যে অ্যাপ্লিকেশনটি ZipCode
ইনস্ট্যান্ট করেন তার জন্য আপনি কি সত্যই আপনার অ্যাপ্লিকেশনটিকে এই বাহ্যিক এপিআই কল করতে বাধ্য করতে চান ?
হতে পারে এটি একটি কঠোর ব্যবসায়ের প্রয়োজনীয়তা এবং তারপরে এটি অবশ্যই ন্যায়সঙ্গত। তবে এটি সর্বজনীন সত্য নয়। এটি প্রচুর ব্যবহারের ক্ষেত্রে থাকবে যেখানে এটি সমাধানের চেয়ে বোঝা বেশি।
দ্বিতীয় উদাহরণ হিসাবে, কোনও ফর্মে আপনার ঠিকানা প্রবেশের সময়, আপনার দেশের আগে আপনার পোস্টকোড প্রবেশ করা সাধারণ। যদিও ইউআই-তে তাত্ক্ষণিক বৈধতা প্রতিক্রিয়া পাওয়া ভাল, তবে অ্যাপ্লিকেশনটি আমাকে "ভুল" জিপকোড ফর্ম্যাটটিতে সতর্ক করে দিলে এটি আসলে আমার (বা ব্যবহারকারী হিসাবে) বাধা হয়ে দাঁড়াবে, কারণ ইস্যুটির আসল উত্সটি (উদাহরণস্বরূপ) আমার দেশটি সেই দেশ নয় যা পূর্বনির্ধারিতভাবে নির্বাচিত হয় এবং সুতরাং ভুল দেশের জন্য বৈধতাটি ঘটে।
এটি ভুল ত্রুটির বার্তা, যা ব্যবহারকারীকে বিভ্রান্ত করে এবং অযথা বিভ্রান্তি সৃষ্টি করে।
ঠিক কীভাবে স্থায়ী বৈধতা কোনও সর্বজনীন সত্য নয়, আমার উদাহরণও নয়। এটি প্রাসঙ্গিক । কিছু অ্যাপ্লিকেশন ডোমেনগুলির সর্বোপরি ডেটা বৈধকরণের প্রয়োজন। অন্যান্য ডোমেনগুলি অগ্রাধিকারের তালিকার তুলনায় উচ্চতর বৈধতা দেয় না কারণ ঝামেলা এটির সাথে নিয়ে আসে তাদের আসল অগ্রাধিকারগুলির সাথে দ্বন্দ্ব করে (উদাহরণস্বরূপ ব্যবহারকারীর অভিজ্ঞতা, বা প্রাথমিকভাবে ত্রুটিযুক্ত ডেটা সংরক্ষণ করার ক্ষমতা যাতে এটি কখনও না হওয়ার পরিবর্তে সংশোধন করা যায়) সংরক্ষিত)
জন্মের তারিখ: মানসিকতার চেয়ে বৃহত্তর এবং আজকের তারিখের চেয়ে কম পরীক্ষা করে দেখুন।
বেতন: শূন্যের চেয়ে বড় বা সমান এটি পরীক্ষা করুন।
এই বৈধতাগুলির সাথে সমস্যাটি হ'ল এগুলি অসম্পূর্ণ, অনর্থক বা অনেক বড় সমস্যার সূচক ।
মানসিকতার চেয়ে কোনও তারিখ বেশি তা পরীক্ষা করা নিরর্থক। মানসিকতার আক্ষরিক অর্থ এটি সম্ভবতমতম তারিখ। এছাড়াও, আপনি প্রাসঙ্গিকতার রেখাটি কোথায় আঁকেন? প্রতিরোধ করার DateTime.MinDate
কিন্তু অনুমতি দেওয়ার DateTime.MinDate.AddSeconds(1)
কী দরকার? আপনি একটি নির্দিষ্ট মান চেরিপিক করছেন যা অন্য অনেক মানের সাথে তুলনায় বিশেষত ভুল নয়।
আমার জন্মদিনটি ২ য় জানুয়ারী 1978 (এটি নয়, তবে এটি ধরে নেওয়া যাক)। তবে আসুন আমরা বলি যে আপনার আবেদনের ডেটাটি ভুল, এবং পরিবর্তে এটি বলে আমার জন্মদিনটি:
- জানুয়ারী 1 ম 1978
- জানুয়ারী 1 লা 1722
- জানুয়ারী 1 লা 2355
এই সমস্ত তারিখ ভুল। এগুলির কোনওটিই অপরের চেয়ে "বেশি সঠিক" নয়। কিন্তু আপনার যাচাইকরণ নিয়মের শুধুমাত্র ধরতে হবে এক এই তিনটি উদাহরণ কয়েক।
আপনি কীভাবে এই ডেটা ব্যবহার করছেন সে প্রসঙ্গে আপনি পুরোপুরি বাদ দিয়েছেন। যদি এটি উদাহরণস্বরূপ জন্মদিনের অনুস্মারক বট হিসাবে ব্যবহার করা হয় তবে আমি বলব যে ভুল তারিখটি পূরণের কোনও বিশেষ খারাপ পরিণতি নেই বলে বৈধতাটি অর্থহীন।
অন্যদিকে, যদি এটি সরকারী ডেটা হয় এবং কারও পরিচয় প্রমাণ করার জন্য আপনার জন্ম তারিখের প্রয়োজন হয় (এবং এটির ব্যর্থতা খারাপ পরিণতির দিকে পরিচালিত করে, উদাহরণস্বরূপ কারও সামাজিক সুরক্ষা অস্বীকার করে), তবে তথ্যের সঠিকতা সর্বমোট এবং আপনার সম্পূর্ণরূপে প্রয়োজন তথ্য যাচাই করুন। আপনার কাছে এখন প্রস্তাবিত বৈধতা পর্যাপ্ত নয়।
বেতনের জন্য, কিছু সাধারণ জ্ঞান রয়েছে যে এটি নেতিবাচক হতে পারে না। তবে আপনি যদি বাস্তবসম্মতভাবে আশা করেন যে অযৌক্তিক ডেটা প্রবেশ করা হচ্ছে, তবে আমি আপনাকে এই অযৌক্তিক ডেটার উত্সটি অনুসন্ধান করার পরামর্শ দেব। কারণ তাদের যদি সংবেদনশীল ডেটা প্রবেশের জন্য বিশ্বাস করা যায় না তবে আপনি তাদের সঠিক ডেটা প্রবেশের জন্য বিশ্বাস করতে পারবেন না ।
পরিবর্তে যদি বেতনটি আপনার অ্যাপ্লিকেশন দ্বারা গণনা করা হয়, এবং কোনওভাবে এটি একটি নেতিবাচক (এবং সঠিক) নম্বর দিয়ে শেষ করা সম্ভব হয়, তবে Math.Max(myValue, 0)
বৈধতা ব্যর্থ হওয়ার পরিবর্তে নেতিবাচক সংখ্যাগুলিকে 0 এ পরিণত করার জন্য আরও ভাল পন্থা হ'ল। কারণ যদি আপনার যুক্তি স্থির করে যে ফলাফলটি একটি negativeণাত্মক সংখ্যা, বৈধতা ব্যর্থ হওয়ার অর্থ এটি গণনাটি আবারও করতে হবে, এবং এটি দ্বিতীয়বারের মতো আলাদা নম্বর নিয়ে আসবে এমন ভাবার কোনও কারণ নেই।
এবং যদি এটি একটি ভিন্ন সংখ্যার সাথে আসে তবে এটি আপনাকে আবার সন্দেহের দিকে নিয়ে যায় যে গণনাটি সামঞ্জস্যপূর্ণ নয় এবং তাই বিশ্বাস করা যায় না।
এটি বৈধতা কার্যকর নয় তা বলার অপেক্ষা রাখে না। তবে অর্থহীন বৈধতা উভয়ই খারাপ কারণ সত্যই কোনও সমস্যা সমাধান না করার এবং মানুষকে সুরক্ষার ভ্রান্ত ধারণা দেওয়ার ক্ষেত্রে চেষ্টা করা দরকার।