جمعه, ۲۸ اردیبهشت, ۱۴۰۳ / 17 May, 2024
مجله ویستا

پیاده سازی ConnectionManager برای استفاده مناسب از Pooling


پیاده سازی ConnectionManager برای استفاده مناسب از Pooling

استفاده مناسب از Connection Pooling در برنامه یكی از مهمترین مباحث در زمینه برنامه نویسی وب می باشد

● مقدمه

استفاده مناسب از Connection Pooling در برنامه یكی از مهمترین مباحث در زمینه برنامه نویسی وب می باشد. عمده مدیریت Connection Pool را سرور به عهده می گیرد و شما نباید به عنوان مثال نگران تخصیص كانكشنهای های بلا استفاده در Pooling به درخواست جدید كانكشن در برنامه باشید. اما یكسری نكات را برای كمك به این مدیریت باید در نوشتن برنامه خود رعایت كنید . برای دانستن آن نكات مطلب استفاده بهینه از Connection در دات نت را بخوانید.

اما این كافی نیست . فرض كنید كه برنامه شما دارای بلوك A و B باشد . در بلوك A درخواست بازكردن یك كانكشن وجود دارد و قبل از بستن آن كانكشن ، به بلوك B می رود و در بدنه آن هم در خواست بازكردن یك كانكشن صادر می شود در انتها بلوك B‌ كانكشن بسته و در انتهای بلوك A هم كانكشن بسته شود . با فرض این كه تمام اصول استفاده بهینه از Connection در دات نت هم رعایت شده باشد بازهم یك جای كار ایراد دارد . آن هم درخواست دوبار باز شدن یك كانكشن كه اكنون باز است و دوبار بسته شدن همان كانكشن. حال اگر بحث Multi Threading را هم اضافه كنید ،‌ابعاد مشكل پیچیده تر می گردد.

اما راه حل مناسبی وجود دارد ،‌آن هم داشتن یك كلاس به عنوان Connection Manager آن هم به صورت Singleton . در این مقاله یك نمونه از این كلاس را با زبان Visual Basic پیاده سازی كردم كه حالت Multi Threading هم در نظر گرفته شده است.

توصیه می كنم حتما در برنامه هایتان از آن و یا نمونه ای از این الگو استفاده كنید . بهتر است كه این كلاس را به لایه DataAccess برنامه اضافه كنید.متن این كلاس در فایل ConnectionManager.zip برای دانلود موجود است.

▪ پیاده سازی كلاس ConnectionManager

نام كلاس را ConnectionManager انتخاب كنید و Constructor آنرا به حالت Private تبدیل كنید . این به خاطر پیاده سازی مدل Singleton است. متاسفانه در این مقاله مجال پرداختن به بحث Singleton Design Pattern نیست. تنها باید اشاره كنم كه در طول زمان حیات یك برنامه در زمان اجرا آن ،‌از كلاس Singleton تنها و تنها یك Instance باید در حافظه باشد. در نظر گرفتن این Pattern برای كلاس ما بسیار الزامی است.

Private Sub New()

End Sub