হ্যাঁ কোনও সংযোগের বাইরে যাওয়া নিরাপদ। আপনি কোনও বহিরাগত নিয়ন্ত্রণকারী ব্লকে সংযোগটি পরিচালনা করেন। এটি সম্পর্কে নিরাপদ কিছুই নেই।
যা সুরক্ষিত তা হ'ল কোড লিখন যা গ্যারান্টি দেয় না যে সংযোগটি সঠিকভাবে নিষ্পত্তি করা হয়েছে। কোনও সংস্থান পরিষ্কার করার ভুলে যাওয়া এটি প্রায় পাশ করার সাথে সম্পর্কিত নয়। আপনি ঠিক তেমন সহজে কোডটি লিখতে পারেন যা এটি কোনও জায়গায় না দিয়েই একটি ঝুলন্ত সংযোগ ছেড়ে দেয়।
সি ++ এ, আপনি যদি স্ট্যাকের উপর বরাদ্দ করেন বা স্মার্ট পয়েন্টার ব্যবহার করেন তবে আপনি আরআইআই দ্বারা সুরক্ষিত। সি # তে একটি কঠোর নিয়ম করুন যে সমস্ত নিষ্পত্তিযোগ্য বস্তু (যেমন সংযোগগুলি) "ব্যবহার" ব্লকে ঘোষণা করা হবে। জাভাতে চেষ্টা করুন পরিশেষে যুক্তি দিয়ে পরিষ্কার করুন। এটি নিশ্চিত করতে সমস্ত ডেটা স্তর কোডের কোড পর্যালোচনা করুন।
সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রে হ'ল যখন আপনার বেশ কয়েকটি ক্রিয়াকলাপ থাকে যা অনেকগুলি ক্রমের সাথে একত্রিত করা যায়। এবং এই ক্রমের প্রতিটিটিরই পারমাণবিক লেনদেন হওয়া (সমস্ত সফল বা রোলব্যাক) হওয়া দরকার। তারপরে আপনাকে অবশ্যই সমস্ত পদ্ধতিতে লেনদেনটি (এবং তাই সম্পর্কিত সংযোগ) পাস করতে হবে।
মনে করুন আমাদের কাছে অনেকগুলি ফুবার () ক্রিয়া রয়েছে যা পারমাণবিক লেনদেন হিসাবে বিভিন্ন উপায়ে একত্রিত হতে পারে।
//example in C#
//outer controlling block handles clean up via scoping with "using" blocks.
using (IDbConnection conn = getConn())
{
conn.Open();
using (IDbTransaction tran = conn.BeginTransaction())
{
try
{//inner foobar actions just do their thing. They don't need to clean up.
foobar1(tran);
foobar2(tran);
foobar3(tran);
tran.Commit();
}
catch (Exception ex)
{ tran.Rollback(); }
}
}//connection is returned to the pool automatically
বিটিডাব্লু আপনি যত তাড়াতাড়ি সংযোগগুলি খুলতে চান, যত তাড়াতাড়ি সম্ভব তা নিষ্পত্তি করতে চান। যদি আপনি সংযোগগুলি অবজেক্টের সদস্য হিসাবে বিবেচনা করে, অপ্রয়োজনীয় রাষ্ট্র হিসাবে পরিচয় করিয়ে দিচ্ছেন এবং সংযোগগুলি প্রয়োজনের তুলনায় অনেক বেশি খোলা রেখে থাকেন তবে আপনার সতীর্থ সঠিক হতে পারে। তবে প্যারামিটার হিসাবে সংযোগ বা লেনদেন পাস করার কাজটি সহজাত ভুল নয়।
BTW। প্রথম শ্রেণীর ফাংশনগুলির জন্য আপনার ভাষার সমর্থনের উপর নির্ভর করে আপনি ফোবার () ক্রিয়াগুলির তালিকাতে নিতে পারেন। সুতরাং একটি ফাংশন ক্রিয়াকলাপের সমস্ত অনুমতি হ্যান্ডেল করতে পারে। প্রতিটি অনুক্রমের জন্য বাইরের নিয়ন্ত্রক ব্লকের সদৃশতা দূর করা।