Start with html (DOM), convert it to Servoy .fm format (SOM), Servoy converts it back to html (DOM). Irony. I could write an
Onion article on this. "Decepticon Browsor VIII is to blame...."
I'm all for "Easy" and I think Servoy 8 is stumbling its way to this point (the bootstrap editor needs to get a lot better). "Easy" is really useful for scaffolding or prototyping phase of development. In many situations, this is all you need (internal business apps, learning, data analysis, management screens).
Easy == Rapid typically and leveraging this is an important part of application development.
Rarely does Easy == Great Code though. It doesn't matter as long as you stay within the bubble/capabilities/demands you can accomplish with "Easy". It does matter when you need to step up to the plate and deliver public facing professional apps. This would be ISV's, business workflows that interface with customers, high traffic websites, etc. Easy is not the prime requirement here — flexible, simple, performant, pluggable, scaleable, refactorable — these suddenly become way more important than "easy".
And rated against these criteria, Servoy NG Client is a horror show. Let's just agree on this for a moment as my point is that it *shouldn't* matter.
To Servoy's credit, "Easy" is really really...*REALLY*...hard to do. FlexibleSimplePerformantPluggableScaleableRefactorable is even harder (Meteor, Angular 2, RactiveJS, ReactiveJS, Ember 2, Ext, Kendo, Knockout, Aurelia, Sails — just off the top of my head — all with varying degrees positives and negatives).
Easy and FlexibleSimplePerformantPluggableScaleableRefactorable?!? I don't care what Servoy marketing says or smoke-and-mirror demos...I'll also sell you a bridge in the desert.
SolutionInstead of trying to do it all in one development workflow, Servoy needs a FlexibleSimplePerformantPluggableScaleableRefactorable Mode. The same recommendation I made for
Servoy 7 beta still stands: provide a standalone client-side data proxy of Servoy foundsets and records. (All of the code is in Sablo already, just needs to be untangled from the Angular/Component assumptions.) Adaptors (a representative example:
https://github.com/ractivejs/ractive-adaptors-backbone) would be the final link from Servoy's data proxy to any client-side framework. A new
super cool framework gets released, just write an adaptor in a few days — instead of creating a new version of Servoy in a few years — and keep on rolling with your current code base.
In the hands of experienced developers, this mode provides a sane approach to handling complexities that require a lot of nuance and optimization, insulates us from Servoy bug dependency, and allows us to keep up with current tech progress.
Easy Mode is then no longer defined by what it can't do or how bad it is or the special workarounds it requires to make better — but by how much leverage and efficiency it brings to the entire application development picture. Junior developers (non-programmers even) and experienced developers can be productive alongside each other. Workflows can be sketched in fast and iterated on many times with no efficiency loss. Risk is mitigated because the hard stuff (typically advanced client-side UI's) isn't tackled until an exact picture of what is required has been worked out. Advanced client-side UI's are developed faster because a lot of the server-side code and data modeling is already done when you get to this stage.
I'm not making this stuff up because this is what we've been doing for a couple of years now using another tech as our RAD base tool. It is a crazy productive approach — Servoy needs this "development pipeline" approach as well. NG Client by itself isn't enough. Browser development tech is moving way too fast for one monolithic approach to keep up.
Concentrate on making NG Client as easy and fast as possible to do stuff with and pair with a FlexibleSimplePerformantPluggableScaleableRefactorable outlet. (The latter should have been done in Servoy 7.) Without something like this in place Servoy's potential and capabilities are hard capped.