المتابعون للمدونة

الجمعة، 26 أبريل 2019

دروس وعبر


دروس وعبر!

 
الإخوة السودانيون:
قوة العسكر لا تقتصر على السلاح فقط، لهذا لن تردعها المظاهرات في الشوارع مهما كانت بالملايين، إلا في حالة واحدة فقط: إذا تمردت مؤسسات الدولة المدنية على العسكر وأعلنت العصيان المدني، ففي هذه الحالة يصير العسكر عاجزين عن فعل أي شيء بسلاحهم إلا حماية الحدود فقط!

لكن المعضلة في هذا الأمر، أن أجهزة الأمن هي التي أفرزت رؤساء ومديري مؤسسات الدولة عبر عقود، والموظفين القدامى تربوا على أنهم ملكية خاصة للدولة، هي التي تطعمهم وهي التي تقيلهم لو شاءت أو تزج بهم في السجون.. لهذا فإن أقوى أسلحة الثورة المضادة هم هؤلاء الموظفون، ولا أعني فقط من كان منهم في القضاء والإعلام، بل في كل إدارات الدولة المختلفة حتى أبسط عامل نظافة!

ولو كانت هناك حالة سخط حاليا بين الموظفين بسبب سوء أحوال المعيشة، فسيتم التركيز (بدعم خليجي) على تحسين أوضاعهم وزيادة رواتبهم، حتى يتم إخراجهم من دائرة الثورة، ويرجعوا إلى الاتكاء على الكنبة، وتحسس كروشهم مطالبين بالاستقرار للاستمتاع بمكاسبهم الوقتية المزيفة، ومحرضين الجيش على قمع الثوار وفرض هيبة الدولة!

لهذا عليكم التركيز في معركة الوعي مع هؤلاء، لأن نزعهم من يد العسكر أشد وطأة من نزع سلاح العسكر!.. لو دان الموظفون للثورة، فسيدير الدولة حاكم مدني يتبعه كل جهاز الدولة.. أما الحالمون الذين يتفاوضون مع العسكر لتسليمهم إدارة الدولة فواضح أنهم لم يتعلموا من تجارب الربيع العربي شيئا، فحتى لو جاء رئيس مدني، فلن تكون له أي سلطة ما دام الجيش يسيطر على القضاء والإعلام والبنك المركزي والمطارات والموانئ والسفارات والعلاقات الخارجية..إلخ.. يسيطر عليها بسبب ولاء موظفيها للقوة القادرة على فرض القانون داخليا، وتسيير العلاقات الخارجية.. ما لم يتحول هذا الولاء للثورة وللحاكم المدني المنتخب أيا كان، واحترام الدستور والقانون كمبدأ وليس كقوة مهينمة فقط، فلا قيمة للمظاهرات ولا حتى لتسلم الإدارة الشكلية، فالمظاهرات يقمعها السلاح في الوقت المناسب، والإدارة تسترد بمجرد قرار عسكري ما لم تتمرد عليه مؤسسات الدولة وتعلن جميعا ولاءها للشعب ومن انتخبه!
هذا أهم دروس الربيع العربي فتعلموه مبكرا.

وبالمناسبة: لا تثقوا بأي جهة تتحدث باسم الثورة، فقد تكون عميلة للعسكر ولكن تؤدي دورا مسرحيا بارعا.. مثلا: المطالبة بمد الفترة الانتقالية إلى أربع سنوات ووضع دستور جديد وكوتة 40% للمرأة هي مطالب مفخخة ستقسم القوى السياسية ما بين مؤيد ومعارض، وسيركب العسكر الجميع بينما يقوم بتهدئة مطالب الموظفين تدريجيا لإخراجهم من المعادلة.. كوتة المرأة طبقتها كل النظم العميلة في المنطقة العربية، فاذكروا لي اسم دولة عربية واحدة محترمة ومستقرة ولا أقول متقدمة!.. هل نزل الشعب السوداني للشوارع لتطبيق تغييرات اجتماعية، أم لإزاحة نظام مستبد ومعالجة مشاكل الاقتصاد؟.. الزج بمطالب اجتماعية فخ مدمر، سيستقطب جزءا من النساء المتحررات، وسيثير غضب معظم الرجال إضافة إلى النساء المحافظات، وحتى إن مر بهدوء، فإن تعيين 40% من النساء بلا خبرة معناه مهازل وفضائح وقصور في الأداء سيستغله إعلام العسكر لتشويه المجلس النيابي والأحزاب السياسية، إلى أن يخرج قرار حله من الدرج!!

كل هذه المهازل حدثت من قبل فلا تقعوا فيها.. وأي شخص أو جهة تطرح مثل هذه الأفكار لا تثقوا بها، فلا فارق في خدمة أهداف الثورة المضادة بين عميل أو غبي!

ركزوا في معركة الوعي مع حزب الكنبة وموظفي الدولة، حتى تسقط سلطة العسكر عمليا على الأرض، ويدين جهاز الدولة بالولاء للثورة والثوار ومن ينتخبونه حاكما، حتى لا تفشل التجربة بسبب موظف يقطع الكهرباء أو يبيع البنزين في السوق السوداء أو عامل نظافة يلقي القمامة في الشوارع بدلا من تنظيفها، لمجرد أنهم تلقوا أوامر من العسكر بخلق أزمات في الوقود والكهرباء والنظافة لعرقلة عمل الرئيس المدني المنتخب!

وفقكم الله.

السبت، 20 أبريل 2019

منع الظهور التلقائي لنافذة المخرجات


إذا كنت مثلي ممن يستفزهم ظهور نافذة المخرجات Output Window تلقائيا كلما قمت بتشغيل المشروع في فيجوال ستديو دوت نت ويعاني كل مرة لإغلاقها، فيمكنك تعطيل هذا الفعل بضغط Options من القائمة الرئيسية Tools، واختيار العنصر Projects and Solutions من الجانب الأيسر من النافذة، وإزالة علامة الاختيار من:
Show output window when build starts!
وستنتهي معاناتك بضغط الزر OK.

 

الاثنين، 15 أبريل 2019

صفحات ZML في مشروع عملي


صفحات ZML في مشروع عملي 

هذا مشروع تعليمي مفيد كتبته ميكروسوفت بلغة سي شارب C# كمثال عملي على استخدام ASP.NET MVC Core 2.2، وهو يتكون من ثلاثة مشاريع فرعية، اثنان منها مجرد مكتبة كود تنتج ملفين من النوع dll لاستخدامهما في أداء وظيفة المشروع الثالث (المسمى web) وهو مشروع ASP.NET المسئول عن إنشاء موقع الويب.. ستجد في الموقع رابطا لتنزيل كتاب pdf بالإنجليزية يتكون من 79 صفحة يشرح المشروع!
 

وقد قررت أن أستخدم هذا المشروع لتجربة صفحات ZML الجديدة الخاصة بي، فحولت المشروع Web إلى كود فيجوال بيزيك واسميته eShopOnWeb.zml، وتركت المشروعين الآخرين بسي شارب لأني لا أملك وقتا لتحويلهما حاليا، ولا مشكلة في هذا، فمن الممكن أن تحتوي مجموعة المشاريع Solution على مشاريع فرعية بلغات مختلفة، فملفات dll الناتجة عن مشاريع سي شارب تصلح للعمل في مشاريع فيجوال بيزيك بشكل طبيعي.. هذه هي نسختي من المشروع.
 
ملحوظة:
يمكن استخدام صفحات zml في مشاريع سي شارب بنفس الطريقة التي سأشرحها هنا.. فكما قلت: هذه الصفحات لا تعتمد على لغة برمجة معينة. 

بعد هذا، كان عليّ أن أحول تصميم الصفحات من كود cshtml إلى كود zml.. هذه مهمة ستحتاج وقتا، لهذا لم أحول حتى الآن سوى أربع صفحات، ثلاث منها موجودة في المجلد Pages وهي:
1- Index.zml
2- Privacy.zml
3- Error.zml
والرابعة موجودة في المجلد:
Pages\Shared\Components\BasketComponent
وهي:
4- Default.zml
لكي تفتح هذه الصفحات في فيجوال ستديو، حددها في متصفح المشاريع، واضغط زر الفأرة الأيمن، ومن القائمة الموضعية اضغط OpenWith.. في النافذة التي ستظهر حدد HTML Editor واضغط الزر "Set as default" ثم اضغط OK.

لو نظرت إلى الصفحة Index.zml فلن تجد فيها أي كود فيجوال بيزك أو كود سي شارب، بل تحتوي فقط على تيجان HTML وبعض تيجان XML الجديدة التي تمثل عناصر Razor.
وستجد أن جملة الشرط مكتوبة باستخدام التاج if وحلقة الدوران مكتوبة بالتاج foreach وكل ما يفعله Vazor هو ترجمة صفحات zml إلى صفحات cshtml في بداية تشغيل البرنامج، لهذا لو فتحت الصفحة Index.cshtml فستجد فيها تعليقا يخبرك أن هذه الصفحة منتجة آليا وينصحك بألا تعدل أي شيء فيها.

 
ولكي تتم ترجمة الصفحات، كل ما عليك فعله هو إضافة السطر التالي في الوسيلة Startup.Configure في الملف Startup.vb:
Vazor.ZmlPages.Compile( )
حيث تقوم الوسيلة Compile بالبحث في كل مجلدات المشروع عن الملفات من النوع zml وتترجمها إلى ملفات cshtml.. وإن كانت ملفات chtml موجودة من قبل، يتم فحص تاريخ آخر تحديث لها، فإن كان أقدم من آخر تحديث للملف.zml الأصلي فهذا معناه أنك أجريت تعديلات فيه، ومن ثم تعاد ترجمته لتحديث صفحة cshtml.
بعد هذا ليس مطلوبا منك أي شيء.. باقي الكود يسير على نفس قواعد مشاريع Razor العادية، فهي تتعامل بشكل طبيعي مع ملفات cshtml التي أنتجناها لها.. كل ما عليك هو كتابة الكود في صفحات zml وستعمل بشكل سحري!
ويمكنك التعرف على أهم التيجان الخاصة بكود zml من هنا، مع ملاحظة أنك تستطيع استخدام @ بنفس القواعد المعمول بها في Razor.
ما زلت أطور هذه التقنية، لهذا لن أنشئ قالبا لمشاريع zml حاليا.. ويمكن لمبرمج سي شارب إنشاء مشروع MVC او Razor Pages بشكل عادي، ثم إضافة ملف جديد (وليكن من النوع txt) ثم تغيير امتداده إلى .zml واختيار Open With بالطريقة التي وضحتها.
أما مبرمج فيجوال بيزيك، فيمكنه إنشاء مشروع جديد باستخدام أحد قوالب Vazor التي أنشأتها من قبل، لكن عليه أن يحذف الجزء الخاص بتشغيل محرك الملفات الافتراضية.. احذف هذا الكود من نهاية كود الوسيلة ConfigureServices في الملف Startup.vb:

services.Configure(Of RazorViewEngineOptions)(

                 Sub(options) options.FileProviders.Add(New Vazor.VazorViewProvider( ))

           )

ثم احذف ملفا vbxm.vb و vazor.vb من المشروع وكذلك الكود الذي يسجل الصفحات في الخريطة (ستصل إليه بمجرد محاولة تشغيل البرنامج، لأنه سيسبب خطأ بعد حذف ملفات vazor).
أخيرا، أضف ملفا نصيا جديدا وغير امتداده إلى zml واكتب فيه كود تصميم الصفحة.
سأوفر بإذن الله قوالب zml لكن بعد أن إكمال مترجم zml واختباره جيدا.

 

صك العشق


صك العشق

يا أنثى ببراءةِ عينيها تُهنا
فاتنةً تلهو في وقتِ فراغٍ حُسنا
مبدعةً تَصنعُ مِن علبٍ فارغةٍ فنّا
ها قلبي ممتلئا بالشوقِ يُدندنُ لحنا
مُسّيه بكفّيكِ وضُمّيه إليكِ
أَضفي ذوقَكِ يا رائعةَ الذوقِ عليه،
دعيه لقلبِكِ أدنى
لفّيه بأشرطةِ التوقِ
أحييه بهمساتِ الشوقِ
حَلّيه بقبلاتِ العشقِ
أدفيه بضمةِ عطفٍ لا تَفترُ حتّى يَفنَى
واكْسيه - كدبدوبٍ - ألوانَ طفولةِ عينيكِ
قلبي ومشاعرُه مِلكُ يديكِ
لا آمنُ - إلا معكِ - عليه السُّـكنَى
وبهذا أُمضِي صَكَّ العشقِ، أُوقّعُ مَثنَى


ودعيني أعترفُ بأني
أحببتُكِ يوما شخصيةَ أنثى تَحتلُّ بعقلي رُكنا
وعشقـتُكِ للسحرِ الكامنِ بأمومةِ قلبِكِ يَفتنُ فَتنا
وقَنعتُ بذلكِ حينًا حتى أذهلَني يوما
حسنٌ باغتني في عينيكِ وفي خديكِ وفي شفتيكِ،
وشوقي أَنَّ
وبهذا أحببتُكِ يا أُنثايَ ثلاثًا حُسنى:
فأَحبَّكِ عقلي فِكرتَهُ.. أحببتُكِ ظنّا
ثم تَدلّهَ قلبي بأميرتِه.. أحببتُكِ مَعنى
ثم فُتَنْتِ - بسحرِ الأُنثى - تَخطفُ عينا
فعشقـتُكِ كَونا
ولهذا لكِ شِعري غنّى
فأجيبي قلبًا يَتمنّى:
"أحببتُكَ".. قوليها وهْـنا
ما أجملَ لو أنّا بُحنا 

محمد حمدي غانم
12/12/2018

 

الخميس، 11 أبريل 2019

صفحات ZML


صفحات ZML

قررت أن أجرب Vazor عمليا في تحويل صفحات موقع ويب مكتوبة بـ chtml إلى vbxml.

ورغم أني نجحت في تحويل الصفحات وحتى مكونات الصفحات Razor Components فقد اكتشفت عيبا كبيرا في كود vbxml وهو عدم توافقه مع مساعدات التيجان Tag Helpers في قليل ن الحالات، لكنها للأسف الحالات الأهم والأكثر فائدة!

وقد وجدت حلولا لهذه المشكلة، لكنها تتطلب تعريف خاصية إضافية في ملف كود فيجوال بيزيك، وكتابة كود طويل نسبيا في ملف vbxml يحتوي في النهاية على بعض صيغ Razor!

كل هذا يزيد من تعقيد كود الصفحة بدلا من تبسيطه، وهذا جعلني أتجه إلى حل آخر من خارج الصندوق، مبنى على تطوير فكرة قالب البيانات ForEach = "m" الذي شرحته من قبل، لكن لهدف مختلف تماما:

فقد قررت تصميم صفحات Razor بدون استخدام أي من كود فيجوال بيزيك وسي شارب!

والفكرة هنا ببساطة، أن أستخدم تيجان XML تعبر عن أوامر لغة البرمجة، ثم أترجم هذه التيجان في وقت التنفيذ إلى كود سي شارب المناظر لها، وبهذا أحصل على صفحة cshtml وأرسلها إلى Razor ليقوم بترجمتها!

وقد نفذت هذه الفكرة بالفعل، وأسميتها ZML (الحرف Z  من Razor والحرفان ML من XML) وكتبت مترجم ZML في هذا القالب.. هذا المترجم البسيط الذي كتبته في عجالة يفترض أنه يستلم صيغة ZML صحيحة بدون أخطاء (لو صار لدينا محرر كود ل ZML فسيكون هو المسئول عن تدقيق الصياغة)، وهو يتعامل حاليا مع عدد محدود من تيجان الأوامر، لكنها هي الأكثر شيوعا.. وسأضيف مزيدا من الأوامر كلما احتجت إليها عمليا بإذن الله.. وهذه الأوامر هي: 

خشاش الحسن


السبت، 6 أبريل 2019

تعريف امتدادات جديدة لملفات الكود


تعريف امتدادات جديدة لملفات الكود

هناك تسهيل جميل أيضا في فيجوال ستديو اكتشفته بالصدفة:
يمكنك تعريف امتدادات جديدة للملفات واختيار لغة البرمجة التي ستتعامل معها!
من القائمة الرئيسية Tools اضغط الأمر Options، وفي نافذة الخيارات اختر العنصر Text Editor من القائمة اليسرى، وأسدل عناصره الفرعية، واختر منها File Extentions.. في الجهة اليمنى من النافذة اكتب اسم الامتداد الذي تريده في مربع النص، واختر لغة البرمجة التي ستتعامل معه من القائمة المنسدلة المجاورة، واضغط الزر Add.
 
 
كما تلاحظون في الصورة، أضفت امتدادين جديدين هما vazor و vbxml ، وبهذا لم أعد أحتاج لتسمية الملفات بامتدادات مركبة مثل Index.vazor.vb و Index.vbxml.vb فقد صار بالإمكان تسميتهما  مثل Index.vazor و Index.vbxml!
لاحظ أن هذه الامتدادات معرفة على مستوى فيجوال ستديو وليس المشروع الحالي فقط، أي أنك تستطيع استخدامها في كل مشاريع فيجوال بيزيك.. لكن عيب هذه الطريقة أنها تعمل على جهازك فقط، ولو أرسلت المشروع لشخص آخر فيجب أن تطلب منه تعريف هذه الامتدادات في فيجوال ستديو لديه.
أحاول أن أجد طريقة لإضافة هذه الامتدادات من خلال برنامج إعداد حتى يمكن توزيعه مع المشاريع التي تستخدم هذه الامتدادات.

الجمعة، 5 أبريل 2019

فصل من لغة العشق


تحرير كود HTML5 في صفحات Vazor


فكرت في حل بسيط للمشكلة التي أشرت إليها في نهاية المنشور السابق، وهي عدم الإكمال التلقائي لعناصر HTML 5 في محرر كود فيجوال بيزيك، وهو أن نفتح الملف بمحرر كود HTML!

نعم.. فيجوال ستديو تحتوي كل المكونات التي تحل المشاكل.. كل ما علينا هو أن نعرف كيف ومتى نستخدمها لتحقيق أهدافنا!

لتنفيذ هذه الفكرة البسيطة، اتبع ما يلي:
- في متصفح المشاريع، حدد ملف vbxml الذي تريد تحرير كود HTML الخاص به.
- اضغط الملف بزر الفأرة الأيمن ومن القائمة الموضعية اختر الأمر Open With.
- في النافذة التي ستظهر حدد العنصر HTML Editor (انظر الصورة) واضغط OK.
 
 
سيتم فتح ملف الكود بمحرر كود HTML الذي سيمنحك قدرات الإكمال التلقائي لأسماء عناصر HTML5 وسماتها، وأنماط تنسيق CSS وأكواد جافا سكربت.. أما أكواد فيجوال بيزيك التي في الصفحة فستظهر كنصوص عادية وسيتجاهل محرر HTML!
هكذا يمكنك أن تصمم الجزء الخاص بالويب، وبعد أن تنتهي أغلق الصفحة، ثم انقر الملف مرتين بالفأرة لفتحه بمحرر فيجوال بيزيك، حيث يمكنك تعديل كود فيجوال بيزيك مع الحصول على مساعدة الإكمال التلقائي وتدقيق قواعد اللغة!

بهذه الحيلة البسيطة نكون قد حلننا مشكلة كبيرة مجانا!
Vazor جاهز الآن للتجربة في إنشاء مشروع عملي.. أرجو أن تجربوه.

 

آخر كلام


الخميس، 4 أبريل 2019

دليل استخدام Vazor

شرح استخدام Vazor لإنشاء مشاريع ASP.NET Core
بلغة فيجوال بيزيك دوت نت
صدرت VS.NET 2019 أول أمس، ولا أرى فيها أي جديد، لأن فيجوال بيزيك 16 و سي شارب 8 و دوت نت كور 3 كلها لم تصدر بعد وأمامها شهران أو ثلاثة!
بل والمستفز أكثر أن VS.NET 2019 نزلت بإصدار دوت نت كور 2.1 وليس 2.2، وعلى من يريد هذا الإصدار الأخير فعليه تنزيله وإعداده في خطوة مستقلة!
لكل هذا قررت أن أصنع نسخة من Vazor تعمل بالإصدار 2.2 من نواة دوت نت، حتى يمكنكم تجربتها في دوت نت 2017.. تجدونها هنا:
يمكنكم تنزيل هذا المشروع إلى أجهزتكم بضغط الزر المنسدل Clone or download ، واختيار Download Zip.
وكما ذكرت، فإن هذه النسخة تحتاج إلى دوت نت كور 2.2.. إذا لم يكن لديكم، فيمكنكم تنزيله من هذه الصفحة:
مع ضرورة اختيار رابط التنزيل من العمود الأوسط لأنه يحتوي على النسخ الخاصة بالمبرمجين وليس المستخدمين، مع التأكد من اختيار نسخة Windows Installer x84 للأجهزة التي عليها ويندوز 32 بت، ونسخة Windows Installer x64 لنسخ ويندوز 64 بت.
وبعد تنزيل هذه النسخة برنامج الإعداد، قم بتشغيله وواصل خطوات الإعداد معه.
والآن فكوا ضغط ملف المشروع، واضغطوا الملف Vazor.sln لفتح المشروع في فيجوال ستديو.. هذا المشروع يحتوي على ثلاثة مشاريع فرعية وهي:

الثلاثاء، 2 أبريل 2019

أغفر وأسامح


Vazor Pages

Vazor Pages
 
نجحت بفضل الله في إنشاء مشروع Razor Pages بفيجوال بيزيك يستخدم vbxml كود لتكوين الصفحات.. لاحظوا أن مشاريع Razor Pages مختلفة عن مشاريع MVC، بسبب الاختلاف في تنظيم المشروع وطريقة عمله، فشلت في تشغيل نظام الملفات التخيلي بنفس الطريقة التي استخدمته بها في مشاريع MVC.. لهذا قررت أن أجرب أولا العمل بدونه، فأنشأت هذا المشروع، وهو يستخدم حيلة بسيطة، حيث أبقيت Index.cshtml في المشروع لكن جعلتها شبه فارغة، وحقنت كود vbxml فيها من خلال الخاصية Model.VbXml بالكود التالي:
@Html.Raw(Model.VbXml)
حيث تقوم الوسيلة المساعدة  Html.Rawبإضافة النص المرسل إليها في الصفحة باعتباره كود HTML خام لا يجب معالجته بأي شكل بل يوضع كما هو.. بهذه الحيلة جعلنا صفحة cshtml مجرد صدفة فارغة ووضعنا فيها المجتوى الذي أنتجناه بفيجوال بيزيك!
وقد عمل المشروع بنجاح، لهذا قررت تنفيذ نفس الفكرة في مشروع من النوع MVC، وقد عمل أيضا بنجاح!
هذه الفكرة بسيطة للغاية، وتجعل كتابة المشروع أسرع بسبب عدم الاحتياج لكل الكود اللازم لتشغيل Vazor، لكن فيها مشكلتان:

عنيكي عايزة تحضني


Vazor 1.0


أخيرا بفضل الله، أنهيت الإصدار الأول من Vazor (VB.NET Razor):

أنشأت مستودعا جديدا للمشروع على GitHub لأني طبقت فكرة جديدة.. ففي المشروع السابق، أنشأت محرك عرض View Engine ليقوم بعرض الصفحات المكتوبة بكود vbxml.. لكني واجهت تحديات كبيرة، لأن الكود الناتج من vbxml ما زال يحتوي على بعض الأجزاء التي لا تصلح للعرض مباشرة في صفحات الويب مثل Tag Helpers وغيرها.. وقد حاولت الغوص في Razor لأرى كيف هذه الأدوات المساعدة، فاكتشفت أنه يقوم بإنتاج فئة سي شارب ويكتب فيها الكود اللازم لإنتاج صفحة HTML ثم يترجمها وينفذها!.. وهذا الأمر سيكون معقدا خاصة أننا نعمل من مشروع فيجوال بيزك، لهذا قررت أن أجد طريقة أخرى.

والحمد لله، وجدت تقنية مدهشة اسمها مزودات الملفات File Providers، تسمح لتطبيقات الويب بالحصول على الملفات من أي مصدر، سواء كان نظام الملفات File System على جهاز، أو مورد مدمج Imbedded Resource داخل ملف dll أو حتى قاعدة بيانات أو أي مصدر افتراضي آخر ليس ملفا أصلا!

وقد وجدث ضالتي في النقطة الأخيرة، حيث يمكنني أن أرسل النص الخاص بالصفحة إلى مزود الملفات الوهمي، ليتعامل معه كأنه ملف cshtml !

وهكذا أنشأت Vazor ليكون مزود ملفات تخيلي Virtual File Provider، مهمته تسليم الصفحات التي كتبناها بفيجوال بيزيك إلى Razor ليقوم هو بكل العمل المتبقي ويعرض الصفحات بالشكل الذي نتوقعه!

هنا بقيت مشكلة كان علي حلها، وهي كيف أميز بين الصفحات المختلفة الناتجة من نفس العرض؟

أنت تعلم أن فئة العرض تحتوي على بعض كود فيجوال بيزيك الذي سيضيف بعض قيم المتغيرات إلى كود Html لتكوين الصفحة المطلوبة.. على سبيل المثال، لو لدينا فئة عرض كل مهمتها أن تعرض الرسالة:

Hello <%= ViewBag.UserName %>

كل مستخدم ستفتح هذه الصفحة، سيرى هذه الرسالة متضمنة اسمه، مثل:

Hello Ahmed

المشكلة هنا أننا سنسلم الصفحة  Hello Ahmed إلى Razor.. ومع مستخدم آخر سنسلم الصفحة Hello Ali ومع مستخدم ثالث Hello Sara.... إلخ مع ملاحظة أن هؤلاء المستخدمين قد يدخلون إلى الموقع الخاص بنا معا في نفس اللحظة، وهذا معناه أن لدينا ثلاث نسخ مختلفة من فئة العرض وليس مجرد صفحة cshtml واحدة كما كان يحدث مع Razor.. ولكن في نظام الملفات التخيلي، سيرسل Razor إلينا ليطلب الصفحة Views\Inex.cshtml بينما لدينا هنا عدة صفحات منتجة جميعا من نفس فئة العرض!.. فكيف نحل هذا؟

لحل هذه المشكلة، أنشأت فئة تعمل كخريطة وأسميتها VazorViewMapper هي عبارة عن قاموس نخزن فيه الصفحات المطلوب عرضها، مع إضافة رقم متفرد في نهاية اسم كل صفحة مثل Index_ID_1 و Index_ID_2 و Index_ID_3 ... إلخ.. وفي فئة المتحكم Controller سنستخدم وسيلة الأداء Action Method لوضع الصفحة المطلوب عرضها في الخريطة باستخدام الوسيلة VazorViewMapper.Add التي ستعيد إلينا الاسم المتفرد الذي تم تكوينه.. هذا الاسم سنرسله إلى الوسيلة View الخاصة بالمتحكم فلحسن الحظ تمتلك هذه الوسيلة صيغة تستقبل اسم الصفحة المطلوب عرضها.. وهكذا نكون قد أرسلنا الاسم الجديد مثل Index_ID_1 إلى Razor ونظرا لأنه يستخدم نظام الملفات الوهمي الخاص بنا، فسيطلب منه البحث عن هذه الصفحة في المسارات المختلفة المتعارف عليها في تقنية Razor وهنا سنستقبل نحن الطلب ونذهب للخريطة للحصول على الصفحة المقابلة لهذا الاسم المتفرد، ونسلمها إلى Razor لعرضها :).. وهكذا يعمل كل شيء على ما يرام.

 

نعم.. هذه هي الفكرة الرئيسية البسيطة التي كتبتها في يوم واحد!

لم تكن فيجوال بيزيك تحتاج إلا إلى محرك عرض ملفات تخيلي (لو نظرتم في الكود لوجدتموه بسيطا وعدد سطوره قليلة!) إضافة إلى خريطة لاختيار الصفحة الصحيحة وتسليمها للعرض! أما الجهد الجبار الحقيقي فتقوم به XML Literals الموجودة داخل فيجوال بيزيك، والتقني المرنة المدهشة الموجودة في محرك Razor.. كل ما كان علي هو أن أنشئ جسرا قصيرا بين التقنيتين حتى يصير من الممكن كتابة عروض الويب بفيجوال بيزيك في تقنية ASP.NET MVC Core.

ملحوظة:

لن يعمل الكود عند معظمكم لأنه مكتوب بالنسخة التجريبية من VS.NET 2019 لكن الإصدار النهائي سيكون يوم 2 أبريل بإذن الله (بعد 4 أيام).. كما أن الكود يستخدم النسخة التجريبية من.NET Core 3.0  وأمام الإصدار النهائي عدة أشهر، لهذا لا بد من تنزيل هذه النسخة التجريبية من الإصدار الثالث لنواة دوت نت حتى يعمل المشروع.

لكن عامة، يمكنكم إنشاء مشروع جديد في فيجوال ستديو 2017 ونسخ ملفات Vazor إليه وستعمل بشكل صحيح.. الفارق كله في إصدار الحزم الإضافية Nugets.. هناك مشكلة واحدة فقط ستحدث في تسجل مزود الملفات التخيلي، إذا واجهت أحدكم فليسألني وسأخبره كيف يحلها.

سأشرح تفاصيل استخدام Vazor في منشور تال بإذن الله.

صفحة الشاعر