…but web frameworks are today ten a penny, why would I be still looking for something? Could it be I didn’t look around enough? Am I too finicky? Or blind for not seeing it right in front of me? Whatever, fact is I’m still looking for the „perfect“ web framework. It doesn’t have to be REALLY new – but it certainly would be new to me.
I would like it to be, in no particular order:
An end-to-end framework
I earn my daily bread developing web applications – the kind I cannot imagine living completely in a browser. Heck, so many web applications cannot ever skip a server, now that I’m thinking… even noBackend DOES have a backend despite its name, mind you! Why shouldn’t I have an „offer“ covering the whole stack, from fingers to the magnetic bits? There’s aplenty web frameworks, from lightweight (which do by definition almost nothing – that’s called “elegance” nowadays) to full-stack (unless your full stack needs a backend). That’s not bad per se, but forces everybody to reinvent the wheel again and again and again and again. The standard API proposed by noBackend is all fine and dandy, but it’s just that, an API, and I don’t want to go shopping and PoC-ing around for a new backend each time some NFR hints to a different persistency… which leads me to:
Supporting different databases
It’s MY dream framework, right? So I want it supporting out of the box persistency in SQL AND whatever NoSQL flavor would seem appropriate. All at the same time, because I want it to scale with ease (that’s called data integration) but without killing me when shuffling data around them. Keywords: polyglot persistence, distributed data management… with ORM and (if real need ever comes) ORM-like NoSQL-abstractions – like with Spring Data. Handling clustering and petabytes of data come for free as well („for free“ is a way of speaking, see this PDF of Martin Fowler and Pramod Sadalage). This looks like a bigger picture, so I want my framework…
I sure won’t be developing a new Twitter any time soon, but it certainly brings a fair amount of safety of the mind if you know beforehand your framework will be able to deal with a few thousand users more. This could mean client-based sessions or drop-in Hadoop, but also stuff traditionally not considered by application developers like Varnish for speedups (sitting right in the middle of the framework, crazy)… all these available at my fingertips. Cloud deployment-compatible? I’ll have one of that too. It shouldn’t be a killer for smaller applications, while at the same time getting your team accustomed to very important (and more modern) concepts. Application architecture evolved quite a lot beyond doing everything in one place and one piece of code, so let’s have a framework showcasing that. Letting the client do stuff, it means I need…
Security out of the box
I’m not talking only about OAuth 1.0a, although that’s have to be included as well. But, why should I always remember to add data sanitization by hand in my application? A framework is supposed to impose best practices upon your projects, right? Security certainly IS good practice, at least that’s what dear OWASP says. Then why doesn’t it come in all projects, by default? Hm? Both server and client side? Are there applications which actually REQUIRE insecure user inputs? Oh, and mentioning user input reminds me of…
Client side processing
The client-server chatter doesn’t HAVE to be REST, really. Maybe I want to expose some actions, you know… However with a nice REST generated directly out of my business objects I’d have something which a different client could talk to with ease. Yes, a mobile client for instance (sorry for my bad habit, I didn’t start mobile-first). And for transport… I’m dreaming about a framework which would hide the transport from me like Atmosphere does, maybe building upon Apache Isis or Restful Objects, while implementing the already mentioned traffic optimizations (did I mention caching?) and of course security around the exposed model…
Model? View. Something.
Yes, I’m talking already about a framework useful for enterprise applications, where „enterprise“ means „big“. I totally want to have some well-founded architecture separation. MVC lived its glory days already, I dare to say. Usage patterns and platforms changed a lot in the meantime, so there came MVVM and MVP trying to modernize it a bit. Then came MOVE, even… Which one I’d summon? I didn’t wrap up my head yet (and can’t tell whether it would be a good head anyway) but the design should exist and it should make sense. I also wonder, what’s the point of having a web application framework only to put it completely in the browser? *coughnockout* A „browser application framework“ just doesn’t cut it, ignoring the hurdles of communication with your data persistence… Friendly recommendations like „set yer dirty flag and transfer only parts of yada yada“ forget the main point of having a framework in the first place: it should optimize access behind my back on connection level with some client side caching and local storage, best-effort delivery and whatnot. In other words: make the framework working for you, not the other way around!
I brought this up for a couple of times as it’s a very important argument for me. Language and all already mentioned arguments aside, I also expect full IDE integration (no silly Maven workarounds) and… I want to be able to do modeling within it! I like OO (can be Java, Scala, C++…), it’s tried and tested and a useful tool for handling abstractions – because I’ll use some UML in the projects. If the framework has a better idea about doing modeling, fine, but it should better be good and ideally also known around. And because the team will be big and have specialized UI designers, the template engine should be HTML and not fancy languages (Scala templates like in Play??? Are we JSP all over again?) These are quite a few requirements, so I’d really want to be able to see what it can – preferably before spending weeks into it:
Real life examples
I have seen enough from „Hello world“ example projects which show actually nothing from what the framework actually can, or what differentiates it from everybody else. How to grab the libs and directories is something I can read from the README.MD thank you very mucho. Which implies there’s a also documentation matching in depth the importance of such a framework… bullet points, videos, whatever, documentation to underline the “paradigm shift”. Documentation with examples which WORK straight out of the box, thank you.
I realize this should become a big integration project, which without interest from some big player will never get the dedicated resources to come true. The ends COULD meet, living proof is the open source project Helios – although that one has a different purpose. Fine. This being said, I’ll go back waiting for THE framework.