تبلیغات
مفاهیم آموزشی كامپیوتر - طراحی یك Data Provider
:: طراحی یك Data Provider
برای طراحی یك Data Provider برای ADO .NET یقینا باید از كلاسهای معروف داده پردازی یعنی : Connection, Command, DataReader, DataAdapter استفاده كرد . اسمبلی System.Data.dll حاوی فضاهای اسمی ( NameSpace ) مناسب برای طراحی جزئیات یك custom data provider میباشد . با ذكر مقدماتی در باب استفاده از Data Provider ها برای برنامه های ویندوز به نحوه عملكرد یك Data Provider خواهیم پرداخت و آنگاه با تشریح جزئیات و نقش موثر هر یك از كلاسهای دسترسی و پردازش داده دات نت یعنی Connection, Command, DataReader, DataAdapter به نحوه تركیب خصوصیات مورد نظر طراح Data Provider با امكانات موجود و چگونگی خصوصی سازی توابع عنصری این كلاسها برای دسترسی به منبع داده خواهیم پرداخت .

برای سالهای متمادی استفاده از ODBC به عنوان یك راه حل استاندارد دسترسی به داده بهترین گزینه گسترش دهندگان نرم افزارهای داده پرداز بود . ODBC با استفاده از روشی مقدماتی با عنوان one-to-one mapping درخواستهای مبتنی بر SQL نرم افزار را به روشهای داخلی دسترسی به داده بانك مورد نظر تبدیل میكرد و باز با رعایت استاندارد SQL پاسخ مورد نظر ( یا نشانه ای بر صحت یا بطلان روند مورد انتظار توسط دستور دهنده ) را به نرم افزار باز میگرداند . در واقع ODBC پلی ارتباطی به گذرگاه های ورود و خروج داده ( Gateway ) یك بانك داده و صادر كننده دستورات SQL بود . به عنوان مثال ODBC با اطلاع از فرمت مورد قبول ورودی و خروجی بانك اسكوئل سرور مایكروسافت و گذرگاهش با عنوان SQL Server tabular data stream كه به TDS شهرت دارد درخواستهای نرم افزار را به "مدیر بانك" تحویل داده و جوابهای مطلوب را باز میگرداند . همینطور در رابطه با گذرگاه استاندارد داده بانك اوراكل ( Oracle Call Interface ) كه به OCI شهرت دارد . عموما رابط های ODBC به عنوان یك پل یا مترجم بین SQL و بانك توسط همان شركت توسعه دهنده بانك گسترش داده می شدند .

ODBC تنها محدود به دسترسی به RDBMS ها نیست . ODBC با قرار گرفتن بر فراز رابطهای COM موجود برای برقراری ارتباط با یك منبع داده مدیریت نشده مثل Excel میتوانست از اطلاعات موجود در آنها نیز استفاده كند ! وظیفه اصلی استاندارد OLE DB تولید ساختاری یكتا "برای تبعیت" بود كه گسترش دهندگان منابع داده ای مثل Lotus یا Word با رعایت آن و تولید ابزارهای مبتنی بر COM امكان دسترسی به این منابع را به تولید كنندگان نرم افزارهای داده پرداز بدهند . ( قرار گرفتن بر فراز رابطهای COM حاصل ترجمه عبارت COM Wrapper است - اینپرایز )

اكنون دات نت در قالب اسمبلی System.Data.dll فضاهای نامی مفیدی را ارائه میكند كه هر كدام توسط كلاسهای حوزه خود كلیه وظایف فوق الذكر را در یك قالب معین مجتمع ( encapsulate ) میكنند و برنامه نویس بدون درگیری با مشكلات نصب و راه اندازی Driver های ODBC یا استفاده از رابط صحیح COM برای یك موجودیت حاوی داده ( Data-awar Object ، به نظر میرسد منظور محصول نرم افزاری خاصی است كه بگونه ای خاص نوعی از داده را نگه داری و مدیریت میكند و با ارائه رابط هائی خاص اجازه دسترسی و خودكار سازی مدیریت این داده ها را مجاز میداند - اینپرایز ) یك راه حل جامع ، یكتا ، سهل الوصول ، سهل الاستفاده ( easy to use رو چی باید ترجمه كنم ؟ - اینپرایز ) را به توسعه دهنده دات نت ارائه میكند . با استفاده از اسمبلی های جامع دات نت و كلاسهای ADO .NET دیگر درگیر نصب و پیكره بندی فیزیكی (!) مسیرهای عبور داده از منبع تا برنامه تان نیستید . همچنین دات نت همكنون ( با تقلیدی كثیف از بورلند - اینپرایز :-) ) مفهوم DataSet را ارائه كرده است كه مفهومی جدید (!) برای ظرف نگهداری و مدیریت داده های بدون اتصال به منبع میباشد . ( disconnected object model )


چرا باید یك فراهم كننده داده ( Data Provider ) طراحی كنم و دلائل استفاده از آن چیست ؟

در صورتیكه منبعی حاوی داده دارید كه بناست پایه طراحی سیستم های نرم افزاری گوناگونی قرار بگیرد برای خروج داده از منبع به سیستمهای مذكور چه فكری كرده اید ؟ آیا تصور میكنید باید سورس نرم افزار مدیریت داده و فرمت فایلهای ذخیره كننده داده را باید در تابلو اعلانات شركت نصب كنید تا تمام برنامه نویسان حال و احتمالا آینده شركت از جزئیات آن اطلاع كسب كرده و آنگاه نرم افزاری برای دسترسی به داده ها طراحی كنند ؟ آیا تصور كرده اید همه برنامه نویسان شما آنقدر دقیق هستند كه راهنمای 300 صفحه ای شما كه خوشبختانه بصورت PDF طراحی شده (!) را مطالعه كنند و بدون هیچ خطائی روش مورد علاقه شان را برای دستیابی به داده های شما "اختراع" كنند ؟ آیا فكر میكنید ... یقینا بعد از اندكی تفكر به این نتیجه خواهید رسید كه یك منبع داده بدون یك سلسله رابطهای استاندارد برای دسترسی به آن مفهومی ندارد ! رابط های یكتای شما باید همانطور كه به یك برنامه نویس ویندوز امكان میدهد بانك را جستجو ( Search ) كند و نتایج را استخراج كند باید امكانات مناسبی را برای طراحان وب سایت شركت در نظر بگیرد تا آنان نیز بدون در گیر شدن در جزئیات طراحی نرم افزار و ... فقط با استفاده از یك یا چند دستور و انتخاب كتابخانه مناسب برای روشهای دسترسی به بانك شما بتوانند صفحات وب ، گزارشهای گرافیكی و چارتهای سازمانی را براحتی استخراج كنند !

ورود به مبحث ، قبل از دات نت

برنامه نویسان محیط ویندوز ، خصوصا برنامه نویسان Visual C++® 6.0 با استفاده از كلاسهای نرم افزاری خاصی ( هم بصورت ATL و صرفا برای ویژوال سی و هم بصورت COM و با رعایت ATL بدون وابستگی به MFC - اینپرایز ) میتوانستند فراهم كننده های داده خودشان را با رعایت قالب OLE DB طراحی كنند و این رابط ها را در اختیار برنامه نویسانشان قرار دهند تا روند دستیابی به منبع داده سازمان استاندارد شود . آنها ساختار ( Struct ) ای با عنوان WIN32_FIND_DATA در اختیار داشتند كه حاوی اطلاعات دقیقی از محل فایلها و دایركتوری های نگهداری داده ، ساختار و فرمت فایلهای ذخیره كننده داده و ... بود و با استفاده از آن Data Provider های خودشان را طراحی میكردند كه به این روند معروف ، DirProv گفته میشد ! اكنون دات نت در قالب كلاسهای خود چیزی مشابه همین عمل را با عنوان جدید managed dirprov انجام میدهد .

كلیات طراحی یك دیتا پرووایدر

Connection : كلاس حیاتی این روند ، كلاس Connection است . ایجاد و مدیریت "برقراری رابطه" با منبع داده به عهده این كلاس است .

Command : كلاسی كه وظیه "ارسال و دریافت" دستورات " استاندارد" به منبع فراهم شده را بر عهده دارد . این دستورات میتوانند ( بنا به طراحی كلاس كه عموما این روزها مبتنی بر SQL است - اینپرایز ) INSERT, UPDATE, DELETE باشند یا حتی دستوراتی چون SELECT كه دارای پاسخ هستند ! ( پس شما فقط در كلاس command با اسكوئل سر و كار دارید ! - اینپرایز )

DataReader : این كلاس كلیه وظایف "پردازش خروجی " مرحله قبل را به عهده دارد .

DataAdapter : این كلاس " محفظه نگهداری داده" كلاس DataReader را با داده های استخراج شده از بانك پر میكند ! ( پس وظایف پردازشی مثل ادیت ، سرچ و ... به عهده دیتا ریدر و وظیفه گرفتن داده از خروجی و پر كردن دیتا ریدر با فرمت مناسب و احتمالا قرار دادن فیلتر های خاص مثل محدودیت ارسال شبكه ای و ... بر عهده دیتا ادپتر است ! - اینپرایز )


شرح وظایف هر كلاس و نحوه طراحی و پیاده سازی ( Implementing ) یك نسخه خصوصی برای نیل به هدف :

الف) Connection Class

این كلاس یك رابط ( Interface ) قابل پیاده سازی دارد به نام IDbConnection با شش تابع عنصری بری باز و بسته كردن یك "ارتباط" با داده ها یا تغییر منبع داده و امثالهم . پیاده سازی Trasaction ها در همین مرحله صورت میگیرد ! رابط IDbTransaction بعد از صدا زدن متد BeginTransaction بوجود می آید و وظایف یك تراكنش را به عهده میگیرد !

ConnectionString و ConnectionTimeout دو خصوصیت مهم این كلاس هستند كه میتوانند نقاط خوبی برای اضافه كردن جزئیات مورد نظر هنگام پیاده سازی مجدد كلاس باشند .


ب) Command Class

این كلاس یك رابط به نام IDbCommand معرفی میكند كه ابزار استفاده كننده از داده هاست برای ارسال دستورات . متد ها و خصوصیتهای نسبتا زیاد این رابط به شما امكنا مدیریت مناسب ارسال دستور و دریافت جواب را میدهد . بنا به اینكه منبع داده های شما یك RDBMS مثل اوراكل است یا یك منبع ساده داده مثل یك فایل پارادوكس از امكانات مناسبی برای مدیریت ارسال و دریافت برخوردارید . به عنوان مثال اگر داده های شما در فایلهای ساده ای در یك دایركتوری واحد ذخیره میشوند میتوانید در پیاده سازی خود از این كلاس خصوصیات مربوط به SQL را حذف كنید و صرفا نام دایركتوری حاوی داده را به عنوان CommandText از كاربر بخواهید !

ج) DataReader Class

این كلاس با ارائه دو رابط به نامهای IDataReader و IDataRecord به كاربر امكان مشاهده داده ها ، جستجو و حتی كسب اطلاع در مورد محتوای ظرف داده توسط metadata ی موجود برای هر resultset را میدهد .

د) DataAdapter Class

IDataAdapter و IDbDataAdapter توسط این كلاس ایجاد میشوند و وظیفه قالب بندی و انتقال داده های تولید شده توسط Command به DataReader را به عهده دارند .


هر كدام از گسترش دهندگان منبع داده ( مثل اوراكل یا مایكروسافت ) با عنایت به استاندارد ADO .NET فراهم كننده داده هایشان را تولید و توزیع نموده اند و برنامه نویس با استفاده از رابط آنها و استفاده از اسمبلی و كلاسهای مناسب به عنوان پایه نرم افزار میتواند از طریق دات نت به داده ها دست یابد و آسانترین روند توزیع نرم افزار پردازش داده را تجربه كند و طراحان منبع داده ها كسب دانشی كه چند سطری از آن را فوقا" مشاهده كردید میتوانند Data Provider های اختصاصی خود را برای سازگاری با دات نت گسترش دهند . نحوه استفاده از Data Provider ها و برقراری ارتباط با منبع داده مبحثی جداگانه و مفصل است كه توصیه میكنم قبل از پرداختن به آن مطالعات مقدماتی حول آن در MSDN داشته باشید . اطلاعات فوق هر چند كمكی به طراحی و پیاده سازی یك Data Provider نمیكند اما به شما به عنوان یك توسعه گر نرم افزار كمك میكند دید بهتری نسبت به آنچه اتفاق می افتد داشته باشید !
:: نوع مطلب : آموزشی ,

:: نوشته شده توسط : حسینی در دوشنبه 31 مرداد 1384 و ساعت 04:08 ق.ظ

:: ویرایش شده در - و ساعت -

لینك ثابت   نظرات ( )

:: مطالب پیشین