আসুন ধরা যাক আপনার কাছে কিছু ধরণের ডেটা স্ট্রাকচার রয়েছে, যা একরকম ডাটাবেসেই টিকে থাকে। সরলতার জন্য, আসুন এই ডেটা স্ট্রাকচারকে কল করুন Person
। আপনাকে এখন একটি সিআরইউডি এপিআই ডিজাইন করার দায়িত্ব দেওয়া হয়েছে, যা অন্যান্য অ্যাপ্লিকেশনগুলিকে এস তৈরি করতে, পড়তে, আপডেট করতে এবং মুছতে দেয় Person
। সরলতার জন্য, ধরে নেওয়া যাক যে এই API টি কোনও একরকম ওয়েব পরিষেবার মাধ্যমে অ্যাক্সেস করা হয়েছে।
সিআরইউডির সি, আর এবং ডি অংশগুলির জন্য, নকশাটি সহজ। আমি সি # -র মতো কার্যকরী স্বরলিপি ব্যবহার করব - বাস্তবায়নটি SOAP, REST / JSON বা অন্য কিছু হতে পারে:
class Person {
string Name;
DateTime? DateOfBirth;
...
}
Identifier CreatePerson(Person);
Person GetPerson(Identifier);
void DeletePerson(Identifier);
আপডেট সম্পর্কে কি? প্রাকৃতিক জিনিসটি হবে
void UpdatePerson(Identifier, Person);
তবে আপনি কোন ক্ষেত্রটি Person
আপডেট করবেন তা কীভাবে নির্দিষ্ট করবেন ?
যে সমাধানগুলি আমি নিয়ে আসতে পারি:
আপনার সর্বদা পাস করার জন্য একজন সম্পূর্ণ ব্যক্তি প্রয়োজন হতে পারে, অর্থাৎ ক্লায়েন্ট জন্ম তারিখ আপডেট করার জন্য এই জাতীয় কিছু করবে:
p = GetPerson(id); p.DateOfBirth = ...; UpdatePerson(id, p);
তবে, এর জন্য গেট এবং আপডেটের মধ্যে এক ধরণের লেনদেনের ধারাবাহিকতা বা লক করা দরকার; অন্যথায়, আপনি কিছু অন্য ক্লায়েন্ট দ্বারা সমান্তরালভাবে করা কিছু অন্যান্য পরিবর্তন ওভাররাইট করতে পারে। এটি এপিআইকে আরও জটিল করে তুলবে। তদ্ব্যতীত, এটি ত্রুটিযুক্ত প্রবণ, নিম্নলিখিত সিউডো কোড (জেএসওএন সমর্থন সহ একটি ক্লায়েন্টের ভাষা ধরে)
UpdatePerson(id, { "DateOfBirth": "2015-01-01" });
- যা সঠিক দেখাচ্ছে - কেবলমাত্র তারিখ-জন্মের সময় পরিবর্তন করবে না, তবে অন্যান্য সমস্ত ক্ষেত্র শূন্য করতে পুনরায় সেট করবে।
আপনি যে সমস্ত ক্ষেত্র তা উপেক্ষা করতে পারেন
null
। যাইহোক, আপনি কীভাবে পরিবর্তন না করেDateOfBirth
এবং ইচ্ছাকৃতভাবে এটিকে শূন্যে পরিবর্তন করার মধ্যে কোনও পার্থক্য করবেন ?স্বাক্ষরটি এতে পরিবর্তন করুন
void UpdatePerson(Identifier, Person, ListOfFieldNamesToUpdate)
।স্বাক্ষরটি এতে পরিবর্তন করুন
void UpdatePerson(Identifier, ListOfFieldValuePairs)
।ট্রান্সমিশন প্রোটোকলের কিছু বৈশিষ্ট্য ব্যবহার করুন: উদাহরণস্বরূপ, আপনি ব্যক্তির জেএসওএন উপস্থাপনায় থাকা সমস্ত ক্ষেত্রকে উপেক্ষা করতে পারেন। যাইহোক, এর জন্য সাধারণত জেএসএনকে নিজেরাই পার্স করা এবং আপনার গ্রন্থাগারের অন্তর্নির্মিত বৈশিষ্ট্যগুলি (যেমন ডাব্লুসিএফ) ব্যবহার করতে সক্ষম না হওয়া দরকার।
সমাধানগুলির কোনওটিই আমার কাছে সত্যই মার্জিত বলে মনে হয় না। অবশ্যই, এটি একটি সাধারণ সমস্যা, সুতরাং প্রত্যেকে কীভাবে ব্যবহার করবেন সেরা অনুশীলন সমাধান?
Person
দৃষ্টান্তগুলির জন্য যা এখনও স্থির হয় না এবং ক্ষেত্রে যদি সনাক্তকারীকে দৃistence়তা ব্যবস্থার অংশ হিসাবে সিদ্ধান্ত নেওয়া হয় তবে কেবল এটি বাতিল করে দিন। উত্তর হিসাবে, জেপিএ একটি সংস্করণ নম্বর ব্যবহার করে; আপনি যদি 23 তম সংস্করণটি পড়েন, আপনি যখন আইটেমটি আপডেট করেন ডিবি-র সংস্করণটি 24 হয় তবে লেখাগুলি ব্যর্থ হয়।