ডেটা অখণ্ডতা সমস্যাগুলি হল সবচেয়ে সাধারণ ডাটাবেস সমস্যাগুলির মধ্যে যা রেল ডেভেলপারদের মুখোমুখি হয়। সঠিক বৈধতার অনুমতি দেওয়ার পাশাপাশি, সঠিকভাবে ডিজাইন করা লেনদেন ব্লকগুলি নিশ্চিত করে যে আপনার ডেটা আংশিকভাবে তৈরি বা আপডেট করা হয়নি।
যাইহোক, লেনদেনগুলি আপনার অ্যাপ্লিকেশনের ক্ষতিও করতে পারে — অথবা এমনকি আপনার সম্পূর্ণ ডাটাবেস নামিয়েও নিতে পারে — যখন সঠিকভাবে ডিজাইন করা না হয়৷
এই নিবন্ধটি লেনদেনের সাথে কাজ করার জন্য ভাল অনুশীলনের একটি সেট অফার করে। টিপসগুলি বেশ সহজ, কিন্তু সেগুলি আপনার লেনদেনগুলিকে বুলেটপ্রুফ, পঠনযোগ্য এবং তুলনামূলকভাবে নিরাপদ করতে সাহায্য করবে৷
আসুন ডুব দেওয়া যাক!
1. যখন সম্ভব রেলে ব্যাং পদ্ধতি ব্যবহার করুন
রেলে, ! সহ পদ্ধতি সংস্করণ আপনাকে আস্থা দিতে পারে যে কিছু ভুল হলে একটি ত্রুটি উত্থাপিত হবে।
উদাহরণস্বরূপ, #save পদ্ধতিটি save!-এও বিদ্যমান সংস্করণ আপনি যদি কোনো ত্রুটি বাড়াতে না চান তাহলে আপনি এই সংস্করণটি কন্ট্রোলারে ব্যবহার করতে চাইতে পারেন:
উপরের পদ্ধতিটি লেনদেনে ভাল কাজ করবে না। save ব্যবহার করে , ত্রুটি উত্থাপিত হলে আমরা প্রক্রিয়াটি ফিরিয়ে আনতে পারি না। তাই ! ব্যবহার করা খুবই গুরুত্বপূর্ণ পদ্ধতির সংস্করণ:
উপরোক্ত ক্ষেত্রে, সদস্যপদ রেকর্ড তৈরি না হলেও লেনদেন সফল হয়, এবং আমরা ডাটাবেসের মধ্যে একটি অগোছালো ডেটা স্ট্রাকচারের সাথে শেষ হয়ে যাই।
আপনি যদি নিম্নলিখিত সংস্করণটি ব্যবহার করেন, তাহলে ActiveRecord::RecordNotSaved এর কারণে লেনদেনটি ফেরত যাবে ত্রুটি:
2. রেল লেনদেনের ত্রুটিগুলি সঠিকভাবে পরিচালনা করুন
যখন এটি লেনদেনের ত্রুটির কথা আসে, তখন কয়েকটি নিয়ম রয়েছে যা আপনাকে সম্মান করা উচিত। এই নিয়মগুলি অনুসরণ করে, আপনার কাছে পঠনযোগ্য এবং ভালভাবে কাজ করা কোড থাকবে যা অন্যান্য বিকাশকারীদের মধ্যে বিভ্রান্তি বা অদ্ভুত আচরণ তৈরি করবে না যা ডিবাগ করা কঠিন৷
ActiveRecord::StatementInvalid থেকে উদ্ধার করবেন না
ActiveRecord::StatementInvalid ডাটাবেস স্তরে কিছু ভুল হলে উত্থাপিত একটি বিশেষ ত্রুটি। এই ত্রুটি থেকে উদ্ধার কখনও. ডাটাবেস ক্যোয়ারীতে কিছু ভুল হলে আপনাকে সর্বদা স্পষ্টভাবে অবহিত করা উচিত।
নিম্নলিখিত কোড এড়িয়ে চলুন:
সঠিক স্তরে রেসকিউ ব্যবহার করুন
আপনি যদি নিম্নলিখিত স্তরে রেসকিউ ব্যবহার করেন, আপনি ত্রুটিটি ধরবেন:
আপনি ত্রুটি ধরার কারণে লেনদেনটি ফিরে আসবে না। ত্রুটিটি উত্থাপিত হতে দিন এবং লেনদেন ব্লকের বাইরে ধরুন:
উপরের পদ্ধতিতে, ত্রুটির ক্ষেত্রে লেনদেনটি ফিরে আসে এবং আপনি ত্রুটিটি ধরতে পারেন। লেনদেনের আচরণ ওভাররাইট না করে লেনদেনের ভিতরে উত্থাপিত ত্রুটিগুলি ধরার জন্য এটি সঠিক পদ্ধতি৷
জেনারিক ত্রুটি ধরবেন না
আপনার StandardError এর মত সাধারণ ত্রুটি ধরা এড়াতে হবে অথবা ArgumentError . এটি পঠনযোগ্য এবং সহজে পরীক্ষাযোগ্য কোডের জন্য একটি সাধারণ নিয়মের মতো, তবে এটি উল্লেখ করার মতো।
এই ত্রুটিগুলি ধরা ডিবাগিংকে আরও কঠিন করে তুলতে পারে, কারণ কোডের অন্যান্য স্থানগুলি ত্রুটিগুলি বাড়াতে পারে৷ এটি আপনার অ্যাপের কিছু গুরুতর সমস্যাকে নীরব করে দিতে পারে যেগুলি আপনার উদ্ধার করার জায়গার সাথে অগত্যা সম্পর্কিত নয়৷
ActiveRecord এর ডিফল্ট রোলব্যাক ত্রুটি বুদ্ধিমানের সাথে ব্যবহার করুন
ActiveRecord একটি নির্দিষ্ট ত্রুটি শ্রেণী প্রদান করে যা আপনি একটি নীরব রোলব্যাক করতে একটি লেনদেনের ভিতরে ব্যবহার করতে পারেন। আপনি ActiveRecord::Rollback বাড়িয়ে লেনদেন ফিরিয়ে আনবেন ত্রুটি, তবে ত্রুটিটি বাইরে উত্থাপিত হয় না, যেমনটি অন্যান্য ত্রুটির সাথে ঘটে। এই আচরণটি মনে রাখবেন এবং এটি বুদ্ধিমানের সাথে ব্যবহার করুন।
3. কখন রেলে লেনদেন ব্যবহার করা এড়িয়ে চলতে হবে তা জানুন
যেকোনো কিছুর মতো, আপনার কোডে অতিরিক্ত লেনদেন করা উচিত নয়। উদাহরণস্বরূপ, একটি সাধারণ ভুল হল আপনার লেনদেনের মধ্যে শুধুমাত্র একটি ক্যোয়ারী মোড়ানো। এর কোনো মানে হয় না কারণ, যদি ক্যোয়ারী সফল না হয়, তাহলে কিছু রোল ব্যাক করার দরকার নেই।
আরেকটি সাধারণ ভুল হল আপনার ডাটাবেস কলের সাথে সম্পর্কহীন কোডকে লেনদেনে মোড়ানো। আপনার এই ধরনের পদ্ধতি এড়ানো উচিত, কারণ ব্লকের ভিতরে কোডটি কার্যকর না হলে লেনদেনটি সংযোগ ধরে রাখবে। যদি সম্ভব হয় তবে শুধুমাত্র আপনার ডাটাবেস কল করতে ব্লকের ভিতরে কোডটি সীমিত করুন।
4. লেনদেনের অসুবিধাগুলি বুঝুন
লেনদেনগুলি একটি ডাটাবেসের মধ্যে ডেটা অখণ্ডতা বজায় রাখতে সহায়তা করে, তবে আপনার তাদের অসুবিধাগুলি সম্পর্কেও সচেতন হওয়া উচিত। উদাহরণস্বরূপ, একটি লেনদেন ব্লকে মোড়ানো প্রশ্নগুলি একক প্রশ্নের চেয়ে বেশি DB সংস্থান নেয়৷
লেনদেন ব্যবহার করার আরেকটি অসুবিধা হল যে এটি আরও জটিল কোডের দিকে নিয়ে যায়। ভুলভাবে ব্যবহার করা হলে লেনদেন আপনার কোডকে কম পাঠযোগ্য করে তুলতে পারে।
5. সঠিক প্রসঙ্গে লেনদেন ব্লক ব্যবহার করুন
ActiveRecord থেকে একটি শ্রেণী উত্তরাধিকার সূত্রে প্রাপ্ত হলে আপনি লেনদেন পদ্ধতি ব্যবহার করতে পারেন ক্লাস এর মানে এই নয় যে আপনি যে সংস্করণটি ব্যবহার করেন তাতে কিছু যায় আসে না। যদিও এটি কার্যকরী দৃষ্টিকোণ থেকে গুরুত্বপূর্ণ নাও হতে পারে, তবে আপনার কোডটি পাঠযোগ্য কিনা তা নিশ্চিত করার ক্ষেত্রে এটি গুরুত্বপূর্ণ৷
তিনটি সাধারণ সংস্করণ লেনদেন পদ্ধতি ব্যবহার করে:
আপনি যখন অনেক মডেল ব্যবহার করেন এবং একটি ব্লকের ভিতরে ক্লাসের সাথে উদাহরণ পদ্ধতির আমন্ত্রণ মিশ্রিত করেন, তখন আপনার ActiveRecord::Base.transaction ব্যবহার করা উচিত :
আপনি যদি বেশিরভাগ ক্ষেত্রে একটি প্রদত্ত মডেলের সাথে সম্পর্কিত কোড নিয়ে কাজ করেন, তাহলে একটি ক্লাসে লেনদেন পদ্ধতি চালু করুন:
আপনি যখন একটি মডেল ইন্সট্যান্সে কাজ করেন, তখন ইন্সট্যান্স লেভেলে লেনদেন পদ্ধতি চালু করা অর্থপূর্ণ হয়:
অবশ্যই, এই নিয়মগুলি সরকারী নয়। এগুলি কোডকে আরও পঠনযোগ্য করার পরামর্শ মাত্র৷
৷পরবর্তী ধাপ:আপনার রুবি অন রেল প্রকল্পে লেনদেন পর্যালোচনা করুন
আমি আশা করি আপনি Ruby on Rails-এ লেনদেনের সাথে কাজ করার জন্য এই টিপসগুলি দরকারী খুঁজে পেয়েছেন৷
৷ডেটা অখণ্ডতা উন্নত করতে এবং আপনার প্রক্রিয়াগুলি বিস্ময়কর পার্শ্বপ্রতিক্রিয়া ছাড়াই সঞ্চালিত হয় তা নিশ্চিত করতে আমরা রেল লেনদেনগুলি সঠিকভাবে ডিজাইন করার গুরুত্ব কভার করেছি৷
যাইহোক, লেনদেন ব্যবহার করার সময় একটি সঠিক ত্রুটি পরিচালনার নীতি শুধুমাত্র উপকারী নয় - এটি আপনার পুরো কোডবেসকেও উন্নত করবে। মনে রাখবেন পরের বার যখন আপনি আপনার কোডে কিছু ত্রুটির আশা করবেন।
ত্রুটি এড়াতে আপনার Ruby on Rails প্রকল্পের নকশায় লেনদেন পর্যালোচনা করার এখন একটি চমৎকার সময়। আপনার অ্যাপ্লিকেশনটিকে আরও স্থিতিশীল করতে আপনার ডেটাবেসের সাথে দক্ষ এবং নির্ভরযোগ্য যোগাযোগের জন্য ডিজাইন করুন৷
৷শুভ কোডিং!
পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!
Pawel Dąbrowski
আমাদের অতিথি লেখক Paweł একজন ওপেন-সোর্স ফ্যান এবং মানুষ এবং কম্পিউটার উভয়ের জন্য লেখার এক দশকেরও বেশি অভিজ্ঞতার সাথে বৃদ্ধির সন্ধানকারী। তিনি উচ্চ-মানের সফ্টওয়্যার তৈরি করতে এবং মানুষ এবং ব্যবসার সাথে মূল্যবান সম্পর্ক তৈরি করতে বিন্দুগুলিকে সংযুক্ত করেন৷
Paweł Dąbrowski
এর সমস্ত নিবন্ধ