XAF - Blazor UI Progress and Future Plans

XAF Team Blog
15 November 2019

Here is our first XAF Blazor (Server Side) demo. It demonstrates straightforward CRUD usage scenarios. Feel free to test its capabilities within a modern desktop or mobile browser.

https://demos.devexpress.com/XAF/BlazorDemo

How It Works

XAF automatically generates this simple UI and database based on the following ORM data model.
using System;
using DevExpress.Xpo;
using DevExpress.Xpo.Metadata;
using DevExpress.ExpressApp.DC;
using DevExpress.Persistent.Base;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.BaseImpl;

namespace BlazorDemo.Module.BusinessObjects {
    [DefaultClassOptions]
    [XafDisplayName("Note")]
    [XafDefaultProperty(nameof(Subject))]
    public class DemoNote : BaseObject {
        public DemoNote(Session session) : base(session) { }
        private string _Subject;
        public string Subject {
            get { return _Subject; }
            set { SetPropertyValue<string>(nameof(Subject), value); }
        }
        private DateTime _CreatedOn;
        [ModelDefault(nameof(IModelCommonMemberViewItem.AllowEdit), "False")]
        [ValueConverter(typeof(UtcDateTimeConverter))]
        public DateTime CreatedOn {
            get { return _CreatedOn; }
            set { SetPropertyValue<DateTime>(nameof(CreatedOn), value); }
        }
        private DateTime _LastModified;
        [ModelDefault(nameof(IModelCommonMemberViewItem.AllowEdit), "False")]
        [ValueConverter(typeof(UtcDateTimeConverter))]
        public DateTime? LastModified {
            get { return _LastModified; }
            set { SetPropertyValue<DateTime?>(nameof(LastModified), value); }
        }
        private string _Owner;
        [ModelDefault(nameof(IModelCommonMemberViewItem.AllowEdit), "False")]
        public string Owner {
            get { return _Owner; }
            set { SetPropertyValue<string>(nameof(Owner), value); }
        }
        private string _Description;
        [Size(SizeAttribute.Unlimited)]
        public string Description {
            get { return _Description; }
            set { SetPropertyValue<string>(nameof(Description), value); }
        }
        public override void AfterConstruction() {
            base.AfterConstruction();
            CreatedOn = DateTime.Now;
            LastModified = DateTime.Now;
            Owner = "BLAZOR Demo User";
        }
        protected override void OnSaving() {
            base.OnSaving();
            if(!Session.IsNewObject(this)) {
                LastModified = DateTime.Now;
            }
        }
    }
}

It uses eXpress Persistent Objects (XPO), but we will support Entity Framework in the future. For more information on how XAF works, refer to Getting Started.

Future Plans

By the end of 2020, we hope to give XAF users a stable platform on which to build Blazor-powered apps (with full CRUD capabilities and core modules like Security and Validation). As you’d expect, usage scenarios will be partly driven by the scope and breadth of the DevExpress Blazor product line. To help clarify our vision, we will build a Blazor demo inspired by its ASP.NET WebForms counterpart (MainDemo) - expect more updates from us in the coming months.

Blazor Server Today, Blazor WebAssembly is for the Future

As you know, our decision was relatively simple: Blazor Server is ready for production while Blazor WebAssembly is in preview (learn more from Microsoft). Blazor WebAssembly is also hampered by a few performance issues.

Scenario
(Desktop / Mobile)

Server Side 

WebAssembly

App Start 

2 sec / 6 sec

6 sec / 46 sec

Open List View 

< 0.5 sec / < 0.5 sec

2 sec / 7 sec

Open Detail View 

< 0.5 sec / < 0.5 sec

1 sec / 7 sec

In addition to performance, Blazor WebAssembly involves more complicated development paradigms for existing XAF users. For instance, you need to consider client and server communications, use asynchronous APIs with IObjectSpaceAsync, ActionBase.ExecuteAsync, etc.

Anyway, we will certainly monitor the progress of Blazor WebAssembly and reconsider our strategy when necessary. So far, we have not done anything that would prevent a potential switch from one hosting mode to another.

Your Feedback Matters

To engage us and discuss XAF’s vision, roadmap and technical requirements, please use our private XAF discussion forum (exclusively for Universal customers). The forum also includes a known issues list for this pre-alpha release.

Feel free to comment below or email us at xafteam@devexpress.com for more information.

27 comment(s)
Bunty
Bunty

Great work guys. +1

15 November, 2019
Chris Royle (LOB)
Chris Royle (LOB)
Looks positive.
15 November, 2019
Krzysztof Krzysztof (LOB)
Krzysztof Krzysztof (LOB)
Looking forward to seeing bigger and bigger feature / module coverage. Thank you guys! You are doing a great work.
15 November, 2019
Manuel Grundner [DevExpress MVP]
Manuel Grundner [DevExpress MVP]
Awesome word Guys! Can't wait to get some of this in my hands :)
15 November, 2019
Gustavo Marzioni
Gustavo Marzioni
Great news! ++1
15 November, 2019
Mustafa Cagri Altindal
Mustafa Cagri Altindal
Good news. 
15 November, 2019
Debeściak
Debeściak
Nice! Great work.
15 November, 2019
Kartal TURGUT
Kartal TURGUT
+1
15 November, 2019
Sven Glöckner 1
Sven Glöckner 1
Thumbs up!
15 November, 2019
Paolo KALC
Paolo KALC
+1
15 November, 2019
Norbert K.
Norbert K.
+1
15 November, 2019
Linton
Linton
+1 We're pleased you've chosen the Blazor path for XAF. Kudos to the Blazor and XAF teams.
15 November, 2019
Reinhold Erlacher
Reinhold Erlacher
Great news! Great work! Your first demo looks very promising! 
16 November, 2019
Eyüp Alemdar
Eyüp Alemdar
+1
16 November, 2019
John E. Salichos
John E. Salichos
Fantastic!
16 November, 2019
Stephen Le Cornu 1
Stephen Le Cornu 1

Looking good, but a year is a long time in IT.

I appreciate there is a fair amount of work in converting code, but who knows where Blazor will actually be in 12 months.

Can you release some interim work?

I will happily work with a Beta, and I am sure plenty of others would too.

CRUD on XPO for custom tables with the same component set that you already have demo'd on Blazor, would be an excellent start.

16 November, 2019
Konstantin Balashov
Konstantin Balashov
+1
17 November, 2019
Peter CaoZheng
Peter CaoZheng
+
17 November, 2019
L Alex
L Alex
Great work guys. +1
17 November, 2019
Marc Greiner (DevExpress MVP)
Marc Greiner (DevExpress MVP)

Your Blazor Server Mode demo looks great!
Thank you for sharing it with us!

Could you maybe blog about a comparison/review of the advantages/drawbacks of a XAF app developed with :
1) Blazor server
2) ASP.NET WebForms
3) XAF WinForms

For example, compare following topics/features:
- How easy it is (or will be) to:
* access the UI controls through a XAF controller in each technology.
* customize templates.
* define action containers.
* extend an action (for example create a ChekableAction, a date range selector, etc.).
- Implement drag and drop between two grids.
- Speed (performance).
- Available XAF modules.
- Specific technology limitations/difficulties.
- ...

18 November, 2019
Bassam Abdelaal
Bassam Abdelaal

Really fast at mobile browser ! , great work ++1

looks very promising

18 November, 2019
Isa_Tahiri
Isa_Tahiri
Great work!!! 
It would be nice to have a monthly statement via this blog plateform or the private discussion on your improvements! Every XAF developper is following this major change I think! 
18 November, 2019
Customer109543
Customer109543

link broken ...

The forum you requested does not exist.

20 November, 2019
Dennis (DevExpress)
Dennis (DevExpress)
@Customer109543: This forum link is for Universal customers only.
20 November, 2019
Dennis (DevExpress)
Dennis (DevExpress)
@Stephen Le Cornu, Marc Greiner: This is certainly something we would love to cover in the next series. We will publish demo source and installers with the Solution Wizard once ready - please stay tuned. For now, our focus is to support default XAF Property Editors.
21 November, 2019
Julio
Julio
Excellent +1
22 November, 2019
he dandan
he dandan

wonderful.

but long time to wait...

8 December, 2019

Please login or register to post comments.