I am currently working on a companies' project for a new customer. The idea is to create a SPA which delivers a lightweight web alternative to an existing fat-client written in C#. The fat client is build upon a standard suite of libraries which create a kind of plugin architecture, so that the customer specific parts of the software can be added as .NET assemblies. I.e. viewing machine orders and CRUD operators are pard of the standard backbone. Then some plugin could provide additional functionality like calculating something special for a specifc type of orders.
The web app has to be updated in real time, as its main purpose is monitoring the production for certain parts of a factory. Despite monitoring production values, the operators can also fire certain actions, depending on the specifc part of the factory, the active view is intended for. The available actions are are quite limited, compared to the real fat client.
I am part of a small team of programmers and we are all experienced in C# and many of the technologies of the .NET Framework and .NET core. But no one is an expierenced Web developer. The web client should also provide some kind of backbone, which is customer independent, and the possibility to load plugins for extension points, which are again provided by the backbone.
The app does also not have to deal with a huge amount of users simultaneously and security is a minor topic.
Our first idea was to use Angular for the web client. So I did some research and tinkered around with TypeScript and Angular. Its kinda straight forward and relatively easy, to create a simple web app. However, i did not find anything existing which looked promising, or get my head around the plugin architecture topic (how to implement that in TypeScript with Angular components).
Then a friend of mine introduced me to Blazor. So I also did some research on it and it looks very promising, especially for us since every developer in our team knows their way around in .NET. code base. To be clear we would only use server side Blazor a.k.a. Razor Components for the project. The main advantage of Blazor would be, that we could use a great deal of our existing C#.
Hence we are currently rather leaning to Blazor. However, since Blazor is currently only in preview and will be released with .NET Core 3.0 Q3/Q4 this year, we are not so sure if it really wise to commit to using Blazor now for a production project.
Which brings me to my questions now:
- Is Blazure mature enough already, to be used for a small SPA in production?
- Do you think Blazor will establish itself in the market or is it likely to disappear after some time?
- Any similar experiences with using a framework for production project at a time, where it was in the preview stage?
- Major advantages (besides beeing a big player regarding web development) over Angular to Blazor? As the web part of the project is (besides the plugin architecture) should be rather simple regarding the UI and the business logic, I personally can not see that much which would make a huge difference for us.
- Any other tips for a rather inexperienced programmer (finished bachelor degree, second work year) in this situation?
Some Pro's and Con's I came up with:
- Reuse established C# code base: consuming a WCF Services does already work (CRUD operations), existing code for Internationalization, user and user permission management, reading values for PLC, model objects etc.
- Possibility to implement a MVVM like pattern for the razor components relatively easy?
- Preview state, not established in the market.
- .... hence documentation is scarce and will become out of date fast, existing UI toolkits / FX are scarce.
- Some times handling the UI-Refresh, especially when handling WCF callbacks, seems very wonky.
- great amount of existing libaries and UI toolkits / FX
- established technology in the market
- reactive programming using RxJS and Observables
- Component structure is pretty straight forward.
- transition to TypeScript
- many existing C# parts would have to be rewritten in TypeScript (like model classes, internatiolization, RESTful service is then necessary...)
- plugin architecture hard to implement?