d .NET – مدونة الفريق

التصنيف: .NET

  • Blazor أم Angular ولماذا؟

    Blazor أم Angular ولماذا؟

    حسناً، أنت تستخدم إطار عمل رائع، مثل ASP.NET Core MVC, Razor Pages ، أو أنت مبرمج من خارج عالم الدوت نت، مثلا مبرمج Django، أنت مبرمج من العيار الثقيل، تحب لغة البرمجة نفسها، السي شارب أو البايثون، وتعتقد أن القوة معها، لا مع عالم الجافاسكريبت، أو أنك لا ترتاح للجافا سكريبت، إلا أن العالم يقول لك اتجه مرغماً إلى إطار عمل FrontEnd وخياراتك بين Angular, Vue, React، وأنت مضطر لاتخاذ قرار، وهنا أقول لك، لقد فتح الله لك خياراً جديداً في عالم الويب ألا وهو البلازور Blazor.

    إذا كنت لا تعرف ما هو البلازور، فأدعوك إلى قراءة هذا المقال، وإذا كنت أيضاً مبرمج بايثون أو أي لغة أخرى، فيمكنك أيضاً قراءته، لأن الWeb Assembly مبدأ واحد: ما هو إطار تصميم صفحات الويب Blazor

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

    blazor vs angular

    هناك مزايا عديدة في هذا النموذج، منها أن الAngular يمكنها أن تعمل مع أي لغة برمجة، فهي لا علاقة لها بلغة البرمجة، لأنها في النهاية تتحدث مع دوال API، فيمكن بهذا للشركات فصل المبرمجين، Back و Front وكلاً في فلك يسبحون، الBack لا يهم أياً كانوا، والFront هي Angular وهي تعمل في كل مكان ومع كل منصة.

    مزايا هذا الأمر عديدة، لا نرغب بذكرها هنا، منها لا الحصر، الفصل بين السلطات، سهولة الفحص، التخصيص.. إلخ، يعيب الأمر عيباً واحداً وهو صعوبة وتعقيد إطار الAngular فهو يعتبر إطار عمل كامل منفصل وأنت بحاجة إلى شهرين من العمل لاتقانه.

    ومع تقدم تقنيات الويب، وظهور الWeb Assembly فإن البلازور في الدوت نت أو الPyscript في البايثون، وغيرها من المنصات، سيكون خيارً بديلاً بل ولربما خيارا أمثلاً.

    البلازور وكل تطبيقات الويب أسمبلي، ستكون أسرع من تطبيقات الجافاسكريبت، ستتيح لك بناء مواقع أقوى وبإمكانيات عالية، وبأداء أعلى، مثلاً الAngular تستخدم Incremental DOM أماالـBlazor فتستخدم خليط من Virtual DOM (هذا أقرب لما تفعله الـreact) والIncremental DOM في أمر جديد خاص بها اسمه RenderTree، والفرق بينهما في هذا المقال Incremental vs Virtual DOM

    صحيح أن الAngular تعتمد على Typescript لكن الTypescript في النهاية ليست لغة Type Safe بينما الBlazor كذلك، يمكن للAngular الوصول مباشرة إلى DOM, أما ال Blazor فتستخدم JS Interop لكن هذا ليس بمشكل.

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

    على الرغم من نضوج الAngular وكثرة المقالات بها، إلا أن الإصدارات المختلفة عنها والتغييرات الجذرية كثيرة، صحيح أن الدعم سيكون أكثر من البلازور، لكن مركب البلازور قد سار ووصل إلى مسافة آمنة، نتمنى من مايكروسوفت المحافظة على هذا المسار وعدم نسف المركب.

    في المستقبل، لا يمكننا التنبؤ بشيء، لكن ما ستوفره البلازوز من تطبيقات مستقبلية هام، مثل إنشاء تطبيقات هواتف ذكية ودمجها في MAUI، اقرأ أيضا ما هي ماوي .NET MAUI، أو بناء تطبيقات سطح مكتب وغيرها من الإمكانيات الهائلة.

    هذا وبالله التوفيق

  • ما هي ماوي .NET MAUI

    ما هي ماوي .NET MAUI

    إن .NET MAUI اختصاراً لـ (.NET Multi-platform App UI) عبارة عن إطار عمل framework لبناء أنظمة وتطبيقات حديثة تعمل على منصات مختلفة كـ iOS, Android, macOS, Windows بالاعتماد على كود واحد مبني بلغة السي شارب وواجهات زامل XAML.

    .NET Multi-platform App UI (.NET MAUI)

    باختصار، هي إطار جديد من مايكروسوفت لتبني تطبيقات أندرويد وiOS بسهولة أكثر وهي بديلة عن منصة الزامارين Xamarin ومنافسة للفلاتر Flutter وهي بذلك تنضم إلى منصات الCross Platform المختلفة.

    وقد وعدت مايكروسوفت أنها ستقدم منصة متعددة لبرمجة التطبيقات مبنية على الدوت نت كور .NET Core، بعكس منصة الزامارين التي تعمل بالدوت نت فريموورك .NET Framework ، وهاي هي منصة ماوي ظهرت للنور بعد جهد سنوات.

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

    بنية منصة زامارين

    أما منصة الماوي فهي تختلف في البنية، إذ تعتمد على كود مشترك واحد في الواجهات وفي مكتبة BCL

    بنية منصة ماوي MAUI

    في مشروع الماوي هناك مشروع واحد فقط، بعكس الزامارين، وهذا ما يؤكد أن الكود واحد، وهذا ما يريح المبرمج ولو كان هناك كود منفصل لأي منصة، فإنها ستكون في داخل المشروع، في الكود الخلفي لكل صفحة MainPage.android.cs و MainPage.iOS.cs

    من المتوقع مستقبلاً بالاعتماد على إطار البلازور Blazor أن تتمكن منصة ماوي من تحزيم نسخة من المشروع تعمل على الويب، وكذلك توجد نسخة حالية تستطيع بها تحزيم تطبيقات تعمل على نظام Tizen الخاص بسامسونج.

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

  • حل مشكلة The value  is not valid for XXXX.

    حل مشكلة The value is not valid for XXXX.

    في ASP.NET Core إذا قمت بربط النموذج Model من نوع Decimal or float or double مع واجهة المعراض View مباشرة أو عبر ViewModel سيظهر لك خطأ The value is not valid for ، وهي عدم إمكانية إرسال القيمة المدخلة من المعراض View إلى النموذج Model، وتظهر عند محاولتك إرسال أرقام كسرية فقط، أما الأرقام الصحيحة فتعمل بكفاءة، ولا تظهر في الأغلب حين تكون لغة المسار Thread إنجليزية أو لغة متناسقة مع الصيغة المعيارية.

    سبب المشكلة هو صيغة النص والفاصلة بين الرقم الصحيح وكسره، ولحل هذه المشكلة، يجب أن نقوم بإرسال حاشية البيانات DataAnnotations في النموذج لتوضيح وتخصيص صيغة النص المدخل.

    الخطوة الأولى هي إنشاء فئة Class كما في الكود التالي:

    using Microsoft.AspNetCore.Mvc.ModelBinding;
    using System.Globalization;
    using System.Threading.Tasks;
    
    public class DecimalModelBinder : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var valueProviderResult = bindingContext
                .ValueProvider
                .GetValue(bindingContext.ModelName);
    
            var cultureInfo = new CultureInfo("en");
    
            decimal.TryParse(
                valueProviderResult.FirstValue,
                NumberStyles.AllowDecimalPoint,
                cultureInfo,
                out var model);
    
            bindingContext
                .ModelState
                .SetModelValue(bindingContext.ModelName, valueProviderResult);
    
            bindingContext.Result = ModelBindingResult.Success(model);
            return Task.CompletedTask;
        }
    }
    

    ثم تقوم باستدعائها كحاشية توصيفية للبيانات في نموذج المعراض ViewModel

            [ModelBinder(BinderType = typeof(DecimalModelBinder))]
            public decimal Price { get; set; }

    من الواضح أن المشكلة في قراءة البيانات من المعراض لذلك لا داعي لإضافة هذا التوصيف في النموذج Model فقط نكتفي في نموذج المعراض ViewModel

    هناك طريقة أخرى لحل هذه المشكلة عن طريق jquery عبر هذا الرابط

    بالتوفيق

  • ما هي ال DOT NET 5 ، ومستقبل البرمجة معها

    ما هي ال DOT NET 5 ، ومستقبل البرمجة معها

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

    ما يميز الدوت نت 5 أنها ستعمل على Windows, Linux, macOS, iOS, Android, tvOS, watchOS and WebAssembly وغيرها أيضا.

    dot net 5

    كان الهدف من الإصدار الثالث من الدوت نت كور (.NET Core 3.0) هو تقليل الفجوة بين الدوت نت كور، والدوت نت فريموورك 4.8 ، حيث أصبحت الدوت نت كور 3 تدعم Windows Forms, WPF and Entity Framework 6. وغيرها من الأمور الجميلة التي كنا نفتقدها.

    بالمناسبة الإصدار 4.8 من الفريموورك سيكون آخر إصدار في حياة الدوت نت التقليدية 🙂 ، ستكون هنالك حتما تحديثات وترقيعات، لكن هذا المسار بالنسبة لمايكروسوفت انتهى.

    من 3.x إلى 5.x

    أما الإصدار التالي وهو الإصدار 5، وأكيد مش 4 حتى لا يحدث لبس مع الاصدار 4.0 الحالي من الدوت نت فريموورك، الذي سيصدر في November 2020 سيردم الفجوة كاملة.

    الثلاث أهداف الرئيسية للإصدار القادم هي

    • Produce a single .NET runtime and framework that can be used everywhere and that has uniform runtime behaviors and developer experiences.
    • Expand the capabilities of .NET by taking the best of .NET Core, .NET Framework, Xamarin and Mono.
    • Build that product out of a single code-base that developers (Microsoft and the community) can work on and expand together and that improves all scenarios.

    وما نعرفه الآن عن الدوت نت كور سيبقى مثل

    • Open source and community-oriented on GitHub.
    • Cross-platform implementation.
    • Support for leveraging platform-specific capabilities, such as Windows Forms and WPF on Windows and the native bindings to each native platform from Xamarin.
    • High performance.
    • Side-by-side installation.
    • Small project files (SDK-style).
    • Capable command-line interface (CLI).
    • Visual Studio, Visual Studio for Mac, and Visual Studio Code integration.

    وما سيكون جديد هو

    • You will have more choice on runtime experiences (more on that below).
    • Java interoperability will be available on all platforms.
    • Objective-C and Swift interoperability will be supported on multiple operating systems. وهذا منطقي لكي تعمل التطبيقات بكفاءة
    • CoreFX will be extended to support static compilation of .NET (ahead-of-time – AOT), smaller footprints and support for more operating systems.

    وهذه هي خطة مايكروسوفت في الفترة القادمة للدوت نت.

    مخطط الإطلاق

  • ما هو إطار تصميم صفحات الويب Blazor في ال .NET

    ما هو إطار تصميم صفحات الويب Blazor في ال .NET

    أهلا وسهلا بك في هذه السلسلة الجديدة من تصميم صفحات الويب باستخدام Microsoft .NET Blazor أو لغاية اللحظة مايكروسوفت تطلق عليه لقب Blazor فقط وهو اختصار ل Razor  في ال Browser لأنه أمر جديد عليهم ولم يتم الفصل بشأن اسم المولود بعد.

    ما هو  Blazor

    (المزيد…)