|
مقاله شماره : 752 |
||||||||
|
X-Method روشي نوين برای اجرا و پيادهسازی سيستمهای تجاری |
||||||||
|
استفاده از XML در لايه Business Abstract مقدمه همانطور که در شمارههاي گذشته عنوان شد، کليه دادهها بين دو لايه Business و Business Abstract از طريق XML تبادل ميشود. در شماره قبل مطالبي درباره نحوه استفاده از XML در لايه Business ارائه شد. در اين شماره با سادهترين و کارآمدترين روش استفاده از XML در لايه Business Abstract آشنا خواهيد شد. تعاريف به روند تبديل اطلاعات به XML، كSerialization و به روند بازيابي اطلاعات از قالب XML، كDeserialization گفته ميشود. بهعنوان مثال کلاس Customer را با اعضاي زير در نظر بگيريد: کلاس فوق دارای اعضاي متفاوتي است. گروهي از اعضا از نوع خصوصيت و گروهي ديگر از نوع متد هستند. کد ستون بعد را در نظر بگيريد: در اين کد يک Instance از کلاس Customer ساخته و برخي اعضاي آن مقدار دهي شده است. سپس با استفاده از متد Save، اطلاعات در بانک اطلاعاتي ذخيره شده است. اما در صورتي که نياز باشد کلاس فوق يا در حقيقت Instance معرفي شده، Serialize شود، نتيجه به صورت زير خواهد بود: <Customer Code="0001" Name="John" Family="Nash" /> از طرفي ديگر در برخي موارد دادههای فوق در قالب XML وجود دارند و بايد يک Instance از کلاس Customer با دادههای فوق ساخته شود (Deserialization). ديدگاه X-Method اگرچه روشهای مختلفي براي انجام دو روند فوق وجود دارد، در X-Method از امکانات وسيع NET Framework. براي انجام دو روند فوق بدون نياز به نوشتن کدهاي اضافه استفاده خواهد شد. در واقع براي اخذ نتيجه، سريعترين روش، استفاده از امکانات موجود در System.Xml.Serialization است. براي انجام دو روند Serialization يا Deserialization بايد مراحل زير انجام شود: مرحله اول – علامتگذاری کلاس مرحله دوم – نوشتن کلاس Serializer در مرحله اول ابتدا کلاس مورد نظر علامتگذاري ميشود. درواقع، در حين علامتگذاري ضمن مشخص شدن اين نکته که آيا کلاس قابل Serialize شدن است يا خير، مشخص ميشود که چه اعضايي و چگونه بايد در XML نهايي ظاهر شوند. توجه داشته باشيد که اين امکان فقط درباره Field ها و Property هاي يک کلاس قابل انتخاب است. کلاس زير را در نظر بگيريد: در حال حاضر علامتگذاري روی کلاس فوق انجام نشده است. بـــــرای انجـــام علامتگذاری از کلاسهـــــای موجـــود در System.Xml.Serialization استفاده ميشود. حال به تعريف جديد کلاس Customer توجه کنيد. در کلاس فوق اولا با انتساب کلاس Serializable به عنوان Attribute به کلاسCustomer، مشخص شده است که کلاس قابل Serialize است. در مراحل بعدي از طريق خصوصيت XmlAttribute مشخص شده است که اعضاي مورد نظر بايد به صورت Attribute در نتيجه XML ظاهر شوند. ضمنا استفاده از ساير کلاسها به عنوان Attribute مانند XmlElement ،XmlIgnore ،XmlArray و غيره براي اعضاي کلاس امکانپذير است. برای کسب اطلاعات بيشتر به مستندات MSDN مراجعه کنيد. درمرحله دوم نوبت بـــــه انجـــــام عمليات Serialization و Deserialization خواهــــد رسيد. بـــراي اين کار از کلاس XmlSerializer در System.Xml.Serialization استفــــاده خواهد شد. به تابع زير که يک Instance از يک کلاس را دريافت کرده و XML نهايي را توليد ميکند، توجه کنيد: تابع Serialize ابتدا يک Instrance از کلاس XmlSerializer ساخته و سپس کلاس مورد نظر را به XML تبديل ميکند. ضمنا به دليل اهميت کاراکترهاي فارسي از UTF8 نيز استفاده شده است. در مرحله بعد نوبت به انجام عمليات Deserialization ميرسد. تابع زير متن XML را به همراه نوع کلاس دريافت کرده و از XML يک Instance خواهد ساخت. در واقع تابع Deserialize عکس عمليات تابع Serialize را انجام خواهد داد. در نهايت کلاسي با نام Serializer ساخته خواهد شد که داراي دو متد Serialize و Deserialize خواهد بود. اين کلاس در X-Method نقش مهمي ايفا خواهد کرد. نکات مهم در هنگام استفاده از تکنيک معرفي شده بايد به نکات زير توجه کنيد: نکته اول – کلاس مورد نظر بايد داراي Constructor پيش فرض باشد تا در نهايت کلاس Serializer بتواند از طريق کلاس XmlSerializer يک Instance از آن ساختــــه و در مرحله بعد اعضاي آن را مقداردهي کنــــد. در صورت عدم وجود Constructor پيشفرض رونــــد Deserialization با خطاي زمان اجرا مواجه خواهد شد. نکته دوم – در صورتي که يک کلاس از کلاسي ديگر به عنوان نوع دادهای در اعضاي خــــود استفاده کرده باشد، ميبايست Attribute مناسب براي عضو مورد نظر انتخاب شود. به عنوان مثال به کلاس Order توجه کنيد: در کلاس Order يک فيلــــد به نام Customer از نوع دادهای Customer وجــــود دارد. در واقـــع کلاس Customer خود داراي اعضاي مختلفي است که امکان نمايش آنها فقط در يک Attribute در XML نهايي وجـود ندارد. بنابراين در ايـن فيلـــد به جاي کلاس XmlAttribute از کلاس XmlElement استفاده خواهد شد. نکته سوم – در صورت به وجود آمدن شرايط فوق بازهم در دو روند Serialization و Deserialization خطاي زمان اجرا به وجود خواهد آمد. چرا که کلاس Serializer نياز به انواع دادهاي استفاده شده در کلاس Order دارد. در حال حاضر کلاس Order از کلاس Customer به عنوان يک نوع دادهاي استفاده کرده است. بنابراين بايد اين نکته مشخص شود که در حين انجام عمليات از نوع دادهاي Customer نيز استفاده شود. بنابراين از کلاس XmlInclude به عنوان Attribute در کلاس Order برای معرفي نوع دادهاي Customer استفاده خواهد شد. در واقع با اين کار کلاس XmlSerializer متوجه خواهد شد که ميبايست در حين انجام عمليات به نوع دادهاي Customer نيز توجه کند. به کد اصلاح شده کلاس Order دقت کنيد. کد زير را در نظر بگيريد: خروجي دستورات بالا به صورت زير است:
<Order Code="10101" Date="2006/08/06"> <CustomerCode="0001"Name="John" Family="Nash" /> </Order> توجه داشته باشيد که يک کلاس ميتواند شامل چندين Attribute از نوع XmlInclude براي معرفي انواع دادهاي مختلف باشد. در شمارههاي آينده مطالب بيشتری از نحوه استفاده از کلاسهای فوق در X-Method ارائه خواهد شد. |
||||||||
|