Hum, that’s a good point. I was thinking the benefits would be to offload more compute to the clients, and be able to reuse an existing JS vDOM library.
It’s true that you’d now need to send back the full state. I guess you could send only parts of it, but then to do so you’re just back at diffing on the server.
I’ve seen it adopted out of first principle. I think there’s a few reason for it, most of them are similar to why someone might design a backend as a series of micro-services instead of a monolith.
By creating a hard boundary between server logic and UX/UI logic, it’s really hard to accidentally couple them and end up with a big ball of mud.
As your application grows in complexity, so will the number of developers who have to work on it. By having the code base split up between UX/UI and business logic you can more easily have two teams each dedicated to different parts of the app.
By seperating the UX/UI like that, you can technically support more than one UX/UI framework, so could be easier to have it run on MacOS, Linux and Windows for example, as you could use all their native UI framework and reuse the business logic parts.
It can make it easier to support both a UI/UX as well as a command line and programmatic interface to the application.
And finally. Sometimes even desktop apps are a kind of webapps, where you’ve got an enterprise sever and people’s computer have to interact to it, and they can share all kind of data with one another etc. Even if the UI/UX is not built using html/JS/css.
I’m not saying this is always better, but it make sense sometimes. Jive still sounds great, because right now with the web technologies, you’re forced to use JS and split things this way, so having an alternative would be nice.