PDA

نسخه کامل مشاهده نسخه کامل : فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET.



Saeid.Online
15-09-2006, 14:00
براي طراحي يك 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 نميكند اما به شما به عنوان يك توسعه گر نرم افزار كمك ميكند ديد بهتري نسبت به آنچه اتفاق مي افتد داشته باشيد !

منبع مقاله : [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]